/ Hex Artifact Content
Login

Artifact cc9582a91b2910404ccda7b7e198815ea0f75948:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
16b0: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
16c0: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
16d0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
16e0: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
16f0: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1700: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1710: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1720: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1730: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1740: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1750: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1760: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1770: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1780: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1790: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
17a0: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
17b0: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
17c0: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
17d0: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
17e0: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
17f0: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1800: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1810: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1820: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1830: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1840: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1850: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1860: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1870: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1880: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1890: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
18a0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
18b0: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
18c0: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
18d0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
18e0: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
18f0: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1900: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1910: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1920: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1930: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1940: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1950: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1960: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1970: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1980: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1990: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
19a0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
19b0: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
19c0: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
19d0: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
19e0: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
19f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1a00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1a10: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1a20: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45  ** The SQLITE_DE
1a30: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
1a40: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
1a50: 66 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20  fined as either 
1a60: 30 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65  0 or 1..** It de
1a70: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
1a80: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74   or not the feat
1a90: 75 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  ures related to 
1aa0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  .** SQLITE_CONFI
1ab0: 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20  G_MEMSTATUS are 
1ac0: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ad0: 61 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69  ault or not. Thi
1ae0: 73 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62  s value can.** b
1af0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  e overridden at 
1b00: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
1b10: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  e sqlite3_config
1b20: 28 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21  () API..*/.#if !
1b30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b40: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1b50: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b60: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1b70: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1b80: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1b90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba0: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1bb0: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1bc0: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1bd0: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1be0: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1bf0: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1c00: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1c10: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1c20: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1c30: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1c40: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1c50: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1c60: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1c70: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1c80: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1c90: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1ca0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1cb0: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1cc0: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1cd0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1ce0: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1cf0: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1d00: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1d10: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1d20: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1d30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1d40: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1d50: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1d60: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1d70: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1d80: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1d90: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
1da0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
1db0: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
1dc0: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
1dd0: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
1de0: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
1df0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
1e00: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
1e10: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
1e20: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
1e30: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
1e40: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
1e50: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
1e60: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
1e70: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
1e80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1e90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1ea0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1eb0: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
1ec0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1ed0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
1ee0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
1ef0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1f00: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1f10: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1f40: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1f50: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
1f60: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
1f70: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
1f80: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1f90: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
1fa0: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
1fb0: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
1fc0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
1fd0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1fe0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1ff0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2000: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2010: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2020: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2030: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2040: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2050: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
2060: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2070: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
2080: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2090: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
20a0: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
20b0: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
20c0: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
20d0: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
20e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
20f0: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2100: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2110: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2120: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2130: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
2140: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2150: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
2160: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
2170: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
2180: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
2190: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
21a0: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
21b0: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
21c0: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
21d0: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
21e0: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
21f0: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2200: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2210: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2220: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2230: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
2240: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
2250: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
2260: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
2270: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
2280: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
2290: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
22a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
22b0: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
22c0: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
22d0: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
22e0: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
22f0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2300: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2310: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2320: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2330: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
2340: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
2350: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
2360: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
2370: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
2380: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
2390: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
23a0: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
23b0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
23c0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23d0: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
23e0: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
23f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2400: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2410: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2420: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2430: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
2440: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
2450: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
2460: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
2470: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
2480: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
2490: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
24a0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
24b0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c0: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
24d0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
24e0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24f0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2500: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2510: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2520: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2530: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2540: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2550: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2560: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2570: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2580: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2590: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
25a0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
25b0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
25c0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
25d0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
25e0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
25f0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2600: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2610: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2620: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2630: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
2640: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2650: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2660: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2670: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2680: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2690: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
26a0: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
26b0: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
26c0: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
26d0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
26e0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
26f0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2700: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2710: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2720: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2730: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2740: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2750: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2760: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2770: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2780: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2790: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
27a0: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
27b0: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
27c0: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
27d0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
27e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
27f0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2800: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2810: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2820: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2830: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2840: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2850: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2860: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2870: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2880: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2890: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
28a0: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
28b0: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
28c0: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
28d0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
28e0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
28f0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2900: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2910: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2920: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2930: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2940: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2950: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2960: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2970: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2980: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2990: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
29a0: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
29b0: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
29c0: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
29d0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
29e0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
29f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2a00: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2a10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2a20: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2a30: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2a40: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2a50: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2a60: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2a70: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2a80: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2a90: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2aa0: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2ab0: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2ac0: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2ad0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2ae0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2af0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2b00: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2b10: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2b20: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2b30: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2b40: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2b50: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2b60: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2b70: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2b80: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2b90: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2ba0: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2bb0: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2bc0: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2bd0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2be0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2bf0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2c00: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2c10: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2c20: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2c30: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2c40: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2c50: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2c60: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2c70: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2c80: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2c90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2ca0: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2cb0: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2cc0: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2cd0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2ce0: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2cf0: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2d00: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2d10: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2d20: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2d30: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2d40: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2d50: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2d60: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2d70: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2d80: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2d90: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
2da0: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
2db0: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
2dc0: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
2dd0: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
2de0: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
2df0: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
2e00: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
2e10: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
2e20: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
2e30: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
2e40: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
2e50: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
2e60: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
2e70: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
2e80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2e90: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
2ea0: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
2eb0: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
2ec0: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
2ed0: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
2ee0: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
2ef0: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
2f00: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
2f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
2f20: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
2f30: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2f40: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
2f50: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
2f60: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
2f70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
2f80: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
2f90: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
2fa0: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
2fb0: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2fc0: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
2fd0: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
2fe0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2ff0: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3000: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3010: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3020: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3030: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
3040: 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e  he input is a in
3050: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f  teger that is to
3060: 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69  o large.** to fi
3070: 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54  t in 32-bits.  T
3080: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
3090: 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69  d inside of vari
30a0: 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a  ous testcase().*
30b0: 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69  * macros to veri
30c0: 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20  fy that we have 
30d0: 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f  tested SQLite fo
30e0: 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70  r large-file sup
30f0: 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  port..*/.#define
3100: 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20   IS_BIG_INT(X)  
3110: 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66  (((X)&~(i64)0xff
3120: 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a  ffffff)!=0)../*.
3130: 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c  ** The macro unl
3140: 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e  ikely() is a hin
3150: 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73  t that surrounds
3160: 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78   a boolean.** ex
3170: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3180: 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20   usually false. 
3190: 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20   Macro likely() 
31a0: 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62  surrounds.** a b
31b0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
31c0: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
31d0: 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68  y true.  These h
31e0: 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69  ints could,.** i
31f0: 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65  n theory, be use
3200: 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65  d by the compile
3210: 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65  r to generate be
3220: 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a  tter code, but.*
3230: 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79  * currently they
3240: 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e   are just commen
3250: 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61  ts for human rea
3260: 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ders..*/.#define
3270: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58   likely(X)    (X
3280: 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  ).#define unlike
3290: 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63  ly(X)  (X)..#inc
32a0: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
32b0: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
32c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
32d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
32e0: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
32f0: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
3300: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
3310: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
3320: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
3330: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
3340: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
3350: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
3360: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
3370: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
3380: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
3390: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
33a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
33b0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
33c0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
33d0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
33e0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
33f0: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
3410: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
3420: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3430: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
3440: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
3450: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
3460: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
3470: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
3480: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
3490: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
34a0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
34b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
34c0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
34d0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
34e0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
34f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3500: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3510: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3520: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
3530: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
3540: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
3550: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
3560: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
3570: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
3580: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
3590: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
35a0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
35b0: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
35c0: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
35d0: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
35e0: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
35f0: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
3600: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
3610: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
3620: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
3630: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
3640: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
3650: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3660: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
3670: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
3680: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
3690: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
36a0: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
36b0: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
36c0: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
36d0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
36e0: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
36f0: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
3700: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
3710: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
3720: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
3730: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
3740: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
3750: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
3760: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
3770: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
3780: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
3790: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
37a0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
37b0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
37c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
37d0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
37e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
37f0: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
3800: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
3810: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
3820: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
3830: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
3840: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3850: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
3860: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3880: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
3890: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
38a0: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
38b0: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
38c0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
38d0: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
38e0: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
38f0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
3900: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
3910: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3930: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
3940: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
3950: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
3960: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
3970: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
3980: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3990: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
39a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
39b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
39c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
39d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
39e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
39f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3a00: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3a10: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3a20: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
3a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
3a40: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
3a50: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
3a60: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
3a70: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rs..*/.#define M
3a80: 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29  IN(A,B) ((A)<(B)
3a90: 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e  ?(A):(B)).#defin
3aa0: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
3ab0: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a  (B)?(A):(B))../*
3ac0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ad0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
3ae0: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
3af0: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
3b00: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
3b10: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
3b20: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
3b30: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
3b40: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
3b50: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
3b60: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
3b70: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
3b80: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
3b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
3ba0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
3bb0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
3bc0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
3bd0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
3be0: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
3bf0: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
3c00: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
3c10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
3c20: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
3c30: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
3c40: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
3c50: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
3c60: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
3c70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
3c80: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
3c90: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
3ca0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
3cb0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
3cc0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
3cd0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
3ce0: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
3cf0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3d00: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
3d10: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
3d20: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
3d30: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
3d40: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
3d50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3d60: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
3d70: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3d80: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
3d90: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
3da0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3db0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
3dc0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
3dd0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3de0: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
3df0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
3e00: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3e10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3e20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
3e30: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
3e40: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
3e50: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3e60: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
3e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3e80: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
3e90: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
3ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
3eb0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3ec0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
3ed0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
3ee0: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
3ef0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
3f00: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
3f10: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3f20: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
3f30: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
3f40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
3f50: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
3f60: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
3f70: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
3f80: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
3f90: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3fa0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3fb0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
3fc0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
3fd0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3fe0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
3ff0: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4000: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4010: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4020: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4030: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4040: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4050: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4060: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4070: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
4080: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
4090: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
40a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
40b0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
40c0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
40d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
40e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
40f0: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4100: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4110: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4120: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4130: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4140: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4150: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4160: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4170: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
4180: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
4190: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
41a0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
41b0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
41c0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
41d0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
41e0: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
41f0: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4200: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4210: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4220: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4240: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4250: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4260: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4270: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
4280: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
42a0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
42b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
42c0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
42d0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
42e0: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
42f0: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4300: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4310: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4320: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4330: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4340: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4350: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4360: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4370: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
4380: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
4390: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
43a0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
43b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
43c0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
43d0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
43e0: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
43f0: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4400: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4410: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4420: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4430: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4440: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4450: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4460: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4470: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
4480: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
4490: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
44a0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
44b0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
44c0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
44d0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
44e0: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
44f0: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4500: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4510: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4520: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4530: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4540: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4550: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4560: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4570: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4580: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 61 74  e LogEst quantat
4590: 69 74 65 73 20 61 72 65 20 73 75 70 70 6f 73 65  ites are suppose
45a0: 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73   to be estimates
45b0: 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76  ,.** not exact v
45c0: 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72  alues, this impr
45d0: 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61  ecision is not a
45e0: 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20   problem..**.** 
45f0: 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72  "LogEst" is shor
4600: 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 69  t for "Logarithi
4610: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
4620: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
4630: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
4640: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
4650: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
4660: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
4670: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
4680: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
4690: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
46a0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
46b0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
46c0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
46d0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
46e0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
46f0: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
4700: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
4710: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
4720: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
4730: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
4740: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
4750: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
4760: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
4770: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
4780: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
4790: 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c  lues. .** Exampl
47a0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35  es:.**.**    0.5
47b0: 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20   -> -10         
47c0: 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20    0.1 -> -33    
47d0: 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34      0.0625 -> -4
47e0: 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54  0.*/.typedef INT
47f0: 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a  16_TYPE LogEst;.
4800: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
4810: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
4820: 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69  er the machine i
4830: 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20  s big or little 
4840: 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75  endian,.** evalu
4850: 61 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e  ated at runtime.
4860: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4870: 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63  E_AMALGAMATION.c
4880: 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33  onst int sqlite3
4890: 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65  one = 1;.#else.e
48a0: 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20  xtern const int 
48b0: 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64  sqlite3one;.#end
48c0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69  if.#if defined(i
48d0: 33 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  386) || defined(
48e0: 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66  __i386__) || def
48f0: 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20  ined(_M_IX86)\. 
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64              || d
4920: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29  efined(__x86_64)
4930: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
4940: 36 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65  6_64__).# define
4950: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
4960: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
4970: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
4980: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
4990: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
49a0: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
49b0: 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  E.#else.# define
49c0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
49d0: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
49e0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
49f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4a00: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
4a10: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
4a20: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
4a30: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
4a40: 41 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49  ATIVE (SQLITE_BI
4a50: 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55  GENDIAN?SQLITE_U
4a60: 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54  TF16BE:SQLITE_UT
4a70: 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f  F16LE).#endif../
4a80: 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66  *.** Constants f
4a90: 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61  or the largest a
4aa0: 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73  nd smallest poss
4ab0: 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e  ible 64-bit sign
4ac0: 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ed integers..** 
4ad0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65  These macros are
4ae0: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72   designed to wor
4af0: 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62  k correctly on b
4b00: 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
4b10: 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65  4-bit.** compile
4b20: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c  rs..*/.#define L
4b30: 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30  ARGEST_INT64  (0
4b40: 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34  xffffffff|(((i64
4b50: 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
4b60: 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c  )).#define SMALL
4b70: 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34  EST_INT64 (((i64
4b80: 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49  )-1) - LARGEST_I
4b90: 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f  NT64)../* .** Ro
4ba0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
4bb0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
4bc0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
4bd0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
4be0: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
4bf0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
4c00: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
4c10: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
4c20: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
4c30: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
4c40: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
4c50: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
4c60: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
4c70: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
4c80: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
4c90: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
4ca0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
4cb0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
4cc0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
4cd0: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
4ce0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
4cf0: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
4d00: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
4d10: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
4d20: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
4d30: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
4d40: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
4d50: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
4d60: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
4d70: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
4d80: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
4d90: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
4da0: 65 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74  ention might ret
4db0: 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c  urn us 4-byte al
4dc0: 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72  igned.** pointer
4dd0: 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  s.  In that case
4de0: 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d  , only verify 4-
4df0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a  byte alignment..
4e00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4e10: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
4e20: 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20  MALLOC.# define 
4e30: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4e40: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4e50: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
4e60: 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65  )0)&3)==0).#else
4e70: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
4e80: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
4e90: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
4ea0: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29  ) - (char*)0)&7)
4eb0: 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ==0).#endif../*.
4ec0: 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20  ** Disable MMAP 
4ed0: 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65  on platforms whe
4ee0: 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74  re it is known t
4ef0: 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69  o not work.*/.#i
4f00: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
4f10: 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  BSD__) || define
4f20: 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20  d(__QNXNTO__).# 
4f30: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
4f40: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
4f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
4f60: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69  MAP_SIZE 0.#endi
4f70: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74  f../*.** Default
4f80: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
4f90: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
4fa0: 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f  memory-mapped I/
4fb0: 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a  O in the VFS.*/.
4fc0: 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
4fd0: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67  .# include <Targ
4fe0: 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68  etConditionals.h
4ff0: 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53  >.# if TARGET_OS
5000: 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65  _IPHONE.#   unde
5010: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
5020: 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e  P_SIZE.#   defin
5030: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5040: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5050: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5060: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5070: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
5080: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
5090: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
50a0: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
50b0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
50c0: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
50d0: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
50e0: 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64  ned(__sun).#   d
50f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5100: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
5110: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
5120: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
5130: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5140: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5150: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
5160: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5170: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
5180: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5190: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
51a0: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
51b0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
51c0: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
51d0: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
51e0: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
51f0: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
5200: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
5210: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
5220: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
5230: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
5240: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
5250: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
5260: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5270: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
5280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5290: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
52a0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
52b0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
52c0: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
52d0: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
52e0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
52f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5300: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
5310: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5320: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
5330: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
5340: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5350: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5360: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5370: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
5380: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
5390: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
53a0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
53b0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
53c0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
53d0: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
53e0: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
53f0: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
5400: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
5410: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
5420: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5430: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
5440: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5450: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
5460: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5470: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
5480: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5490: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
54a0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
54b0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
54c0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
54d0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
54e0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
54f0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5500: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5510: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5520: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
5530: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
5540: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
5550: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
5560: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
5570: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
5580: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
5590: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
55a0: 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65  ndle. .**.** The
55b0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
55c0: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
55d0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
55e0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
55f0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
5600: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
5610: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
5620: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
5630: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
5640: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
5650: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
5660: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
5670: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
5680: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
5690: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
56a0: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
56b0: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
56c0: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
56d0: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
56e0: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
56f0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
5700: 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69  *xFunc)(void *,i
5710: 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73  nt);  /* The bus
5720: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
5730: 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20  void *pArg;     
5740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
5750: 72 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20  rst arg to busy 
5760: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
5770: 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20  t nBusy;        
5780: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
5790: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
57a0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d  h busy call */.}
57b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66  ;../*.** Name of
57c0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
57d0: 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65  base table.  The
57e0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
57f0: 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73   table.** is a s
5800: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61  pecial table tha
5810: 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
5820: 73 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73  s and attributes
5830: 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20   of all.** user 
5840: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
5850: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
5860: 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20  ASTER_NAME      
5870: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
5880: 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41  .#define TEMP_MA
5890: 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69  STER_NAME  "sqli
58a0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a  te_temp_master".
58b0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d  ./*.** The root-
58c0: 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74  page of the mast
58d0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
58e0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  e..*/.#define MA
58f0: 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20  STER_ROOT       
5900: 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d  1../*.** The nam
5910: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  e of the schema 
5920: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
5930: 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78  e SCHEMA_TABLE(x
5940: 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44  )  ((!OMIT_TEMPD
5950: 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f  B)&&(x==1)?TEMP_
5960: 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54  MASTER_NAME:MAST
5970: 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20  ER_NAME)../*.** 
5980: 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61  A convenience ma
5990: 63 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73  cro that returns
59a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
59b0: 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e  lements in.** an
59c0: 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69   array..*/.#defi
59d0: 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20  ne ArraySize(X) 
59e0: 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66     ((int)(sizeof
59f0: 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29  (X)/sizeof(X[0])
5a00: 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  ))../*.** Determ
5a10: 69 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d  ine if the argum
5a20: 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f  ent is a power o
5a30: 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65  f two.*/.#define
5a40: 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29   IsPowerOfTwo(X)
5a50: 20 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d   (((X)&((X)-1))=
5a60: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  =0)../*.** The f
5a70: 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61  ollowing value a
5a80: 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d  s a destructor m
5a90: 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69  eans to use sqli
5aa0: 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20  te3DbFree()..** 
5ab0: 54 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  The sqlite3DbFre
5ac0: 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75  e() routine requ
5ad0: 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74  ires two paramet
5ae0: 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74  ers instead of t
5af0: 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d  he .** one param
5b00: 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72 75  eter that destru
5b10: 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77  ctors normally w
5b20: 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65  ant.  So we have
5b30: 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a   to introduce .*
5b40: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
5b50: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
5b60: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
5b70: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
5b80: 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  ny .** pointer w
5b90: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
5ba0: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
5bb0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
5bc0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
5bd0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
5be0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
5bf0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
5c00: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
5c10: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
5c20: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
5c30: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
5c40: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
5c50: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
5c60: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
5c70: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
5c80: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
5c90: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
5ca0: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
5cb0: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
5cc0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
5cd0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
5ce0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
5cf0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
5d00: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
5d10: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
5d20: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
5d30: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
5d40: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
5d50: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
5d60: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
5d70: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
5d80: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
5d90: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
5da0: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
5db0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
5dc0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
5dd0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
5de0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
5df0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
5e00: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
5e10: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
5e20: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
5e30: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
5e40: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
5e50: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
5e60: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
5e70: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
5e80: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
5e90: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
5ea0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
5eb0: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
5ec0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
5ed0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
5ee0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
5ef0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
5f00: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
5f10: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
5f20: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
5f30: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
5f40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
5f50: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
5f60: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
5f70: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
5f80: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
5f90: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
5fa0: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
5fb0: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
5fc0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5fd0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
5fe0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
5ff0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
6000: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
6010: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
6020: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
6030: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
6040: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
6050: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
6060: 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66  LITE_WSD .  #def
6070: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
6080: 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  v.  #define sqli
6090: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
60a0: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65  sqlite3Config.#e
60b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
60c0: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
60d0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70   are used to sup
60e0: 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77  press compiler w
60f0: 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a  arnings and to.*
6100: 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20  * make it clear 
6110: 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  to human readers
6120: 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   when a function
6130: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65   parameter is de
6140: 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c  liberately .** l
6150: 65 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69  eft unused withi
6160: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
6170: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75  function. This u
6180: 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77  sually happens w
6190: 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f  hen.** a functio
61a0: 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20  n is called via 
61b0: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
61c0: 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  er. For example 
61d0: 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  the .** implemen
61e0: 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  tation of an SQL
61f0: 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20   aggregate step 
6200: 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74  callback may not
6210: 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61   use the.** para
6220: 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67  meter indicating
6230: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
6240: 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
6250: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
6260: 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73  ,.** if it knows
6270: 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e   that this is en
6280: 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65  forced elsewhere
6290: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66  ..**.** When a f
62a0: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
62b0: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74  r is not used at
62c0: 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20   all within the 
62d0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
62e0: 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e  on,.** it is gen
62f0: 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f  erally named "No
6300: 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73  tUsed" or "NotUs
6310: 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69  ed2" to make thi
6320: 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72  ngs even clearer
6330: 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68  ..** However, th
6340: 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61  ese macros may a
6350: 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73  lso be used to s
6360: 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73  uppress warnings
6370: 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70   related to.** p
6380: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d  arameters that m
6390: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65  ay or may not be
63a0: 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20   used depending 
63b0: 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  on compilation o
63c0: 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65  ptions..** For e
63d0: 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72  xample those par
63e0: 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65  ameters only use
63f0: 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74  d in assert() st
6400: 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65  atements. In the
6410: 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20  se.** cases the 
6420: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e  parameters are n
6430: 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20  amed as per the 
6440: 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e  usual convention
6450: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  s..*/.#define UN
6460: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78  USED_PARAMETER(x
6470: 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66  ) (void)(x).#def
6480: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
6490: 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45  ETER2(x,y) UNUSE
64a0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55  D_PARAMETER(x),U
64b0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
64c0: 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72  y)../*.** Forwar
64d0: 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  d references to 
64e0: 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79  structures.*/.ty
64f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67  pedef struct Agg
6500: 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79  Info AggInfo;.ty
6510: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
6520: 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e  hContext AuthCon
6530: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
6540: 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
6550: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79   AutoincInfo;.ty
6560: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74  pedef struct Bit
6570: 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65  vec Bitvec;.type
6580: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53  def struct CollS
6590: 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65  eq CollSeq;.type
65a0: 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d  def struct Colum
65b0: 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65  n Column;.typede
65c0: 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a  f struct Db Db;.
65d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
65e0: 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79  chema Schema;.ty
65f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
6600: 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20  r Expr;.typedef 
6610: 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
6620: 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65  ExprList;.typede
6630: 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61  f struct ExprSpa
6640: 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65  n ExprSpan;.type
6650: 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20  def struct FKey 
6660: 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74  FKey;.typedef st
6670: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
6680: 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74  tor FuncDestruct
6690: 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  or;.typedef stru
66a0: 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44  ct FuncDef FuncD
66b0: 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ef;.typedef stru
66c0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46  ct FuncDefHash F
66d0: 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65  uncDefHash;.type
66e0: 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73  def struct IdLis
66f0: 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65  t IdList;.typede
6700: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49  f struct Index I
6710: 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74  ndex;.typedef st
6720: 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
6730: 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79   IndexSample;.ty
6740: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
6750: 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a  Class KeyClass;.
6760: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
6770: 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a  eyInfo KeyInfo;.
6780: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
6790: 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69  ookaside Lookasi
67a0: 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  de;.typedef stru
67b0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
67c0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a   LookasideSlot;.
67d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d  typedef struct M
67e0: 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79  odule Module;.ty
67f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d  pedef struct Nam
6800: 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e  eContext NameCon
6810: 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74  text;.typedef st
6820: 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65  ruct Parse Parse
6830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6840: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
6850: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
6860: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6870: 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a   RowSet RowSet;.
6880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
6890: 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69  avepoint Savepoi
68a0: 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  nt;.typedef stru
68b0: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
68c0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
68d0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
68e0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
68f0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
6900: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
6910: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
6920: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
6930: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
6940: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
6950: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
6960: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
6970: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
6980: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
6990: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
69a0: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
69b0: 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
69c0: 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65  TriggerPrg;.type
69d0: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
69e0: 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74  erStep TriggerSt
69f0: 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ep;.typedef stru
6a00: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
6a10: 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  d UnpackedRecord
6a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6a30: 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a   VTable VTable;.
6a40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
6a50: 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a  tabCtx VtabCtx;.
6a60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
6a70: 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79  alker Walker;.ty
6a80: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
6a90: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
6aa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6ab0: 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a   With With;../*.
6ac0: 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e  ** Defer sourcin
6ad0: 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72  g vdbe.h and btr
6ae0: 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72  ee.h until after
6af0: 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a   the "u8" and .*
6b00: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
6b10: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
6b20: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
6b30: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
6b40: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
6b50: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
6b60: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
6b70: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
6b80: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
6b90: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
6ba0: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
6bb0: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
6bc0: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68  ..#include "os.h
6bd0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65  ".#include "mute
6be0: 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  x.h".../*.** Eac
6bf0: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
6c00: 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62  to be accessed b
6c10: 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20  y the system is 
6c20: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
6c30: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
6c40: 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72  structure.  Ther
6c50: 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74  e are normally t
6c60: 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  wo of these stru
6c70: 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65  ctures.** in the
6c80: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72   sqlite.aDb[] ar
6c90: 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20  ray.  aDb[0] is 
6ca0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
6cb0: 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44  e file and.** aD
6cc0: 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61  b[1] is the data
6cd0: 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
6ce0: 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79  o hold temporary
6cf0: 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69   tables.  Additi
6d00: 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  onal.** database
6d10: 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  s may be attache
6d20: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20  d..*/.struct Db 
6d30: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
6d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
6d50: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
6d60: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
6d70: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
6d80: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
6d90: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
6da0: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
6db0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
6dc0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
6dd0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
6de0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
6df0: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
6e00: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
6e10: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
6e20: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
6e30: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
6e40: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
6e50: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
6e60: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
6e70: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
6e80: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
6e90: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
6ea0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
6eb0: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
6ec0: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
6ed0: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
6ee0: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
6ef0: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
6f00: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
6f10: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
6f20: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
6f30: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
6f40: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
6f50: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
6f60: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
6f70: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
6f80: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
6f90: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
6fa0: 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d  ct..** .** Schem
6fb0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
6fc0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
6fd0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
6fe0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
6ff0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
7000: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
7010: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
7020: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
7030: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
7040: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
7050: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
7060: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
7070: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
7080: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
7090: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
70a0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
70b0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
70c0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
70d0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
70e0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
70f0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
7100: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
7110: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
7120: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
7130: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
7140: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
7150: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
7160: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
7170: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
7180: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
7190: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
71a0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
71b0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
71c0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
71d0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
71e0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
71f0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
7200: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
7210: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
7220: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
7230: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
7240: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7250: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
7260: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
7270: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
7280: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
7290: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
72a0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
72b0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
72c0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
72d0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
72e0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
72f0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
7300: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
7310: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
7320: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
7330: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
7340: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
7350: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
7360: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
7370: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
7380: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
7390: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
73a0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
73b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
73c0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
73d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
73e0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
73f0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
7400: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
7410: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
7420: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
7430: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
7440: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
7450: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
7460: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
7470: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
7480: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
7490: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
74a0: 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d   .** Db.pSchema-
74b0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
74c0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
74d0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
74e0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
74f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28  pSchema->flags&(
7500: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
7510: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
7520: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
7530: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7540: 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
7550: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
7560: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
7570: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
7580: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50  chema->flags|=(P
7590: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
75a0: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
75b0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
75c0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e  Schema->flags&=~
75d0: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
75e0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
75f0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
7600: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
7610: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
7620: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
7630: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
7640: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
7650: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
7660: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
7670: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
7680: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
7690: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
76a0: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
76b0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
76c0: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
76d0: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
76e0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
76f0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
7700: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
7710: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
7720: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
7730: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
7740: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
7750: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
7760: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
7770: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
7780: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
7790: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
77a0: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
77b0: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
77c0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
77d0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
77e0: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
77f0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
7800: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
7810: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
7820: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
7830: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
7840: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
7850: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
7860: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
7870: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
7880: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
7890: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
78a0: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
78b0: 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31  _TRIGGER_DEPTH+1
78c0: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
78d0: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
78e0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
78f0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
7900: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
7910: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
7920: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
7930: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
7940: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
7950: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
7960: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
7970: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7980: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
7990: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
79a0: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
79b0: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
79c0: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
79d0: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
79e0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
79f0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
7a00: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
7a10: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
7a20: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
7a30: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
7a40: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
7a50: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
7a60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
7a70: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
7a80: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
7a90: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
7aa0: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
7ab0: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
7ac0: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
7ad0: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
7ae0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
7af0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
7b00: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
7b10: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
7b20: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
7b30: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
7b40: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
7b50: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
7b60: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
7b70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7b80: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
7b90: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
7ba0: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
7bb0: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
7bc0: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
7bd0: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
7be0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
7bf0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
7c00: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
7c10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
7c20: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
7c30: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
7c40: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
7c50: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
7c60: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
7c70: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
7c80: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
7c90: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
7ca0: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
7cb0: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
7cc0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
7cd0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
7ce0: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
7cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
7d00: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
7d10: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
7d20: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
7d30: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
7d40: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
7d50: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
7d60: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
7d70: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
7d80: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
7d90: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
7da0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
7db0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
7dc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7dd0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
7de0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
7df0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
7e00: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
7e10: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
7e20: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
7e30: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
7e40: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
7e50: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
7e60: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
7e70: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
7e80: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
7e90: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
7ea0: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
7eb0: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
7ec0: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
7ed0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
7ee0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
7ef0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
7f00: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
7f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7f20: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
7f30: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
7f40: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
7f50: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
7f60: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
7f70: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
7f80: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
7f90: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
7fa0: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
7fb0: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
7fc0: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
7fd0: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
7fe0: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
7ff0: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
8000: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
8010: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
8020: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
8030: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
8040: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
8050: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
8060: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
8070: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
8080: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
8090: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
80a0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  };../*.** Each d
80b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
80c0: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
80d0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
80e0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
80f0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
8100: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
8110: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
8120: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
8130: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
8140: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
8150: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8160: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
8170: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
8180: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
8190: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
81a0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
81b0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
81c0: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
81d0: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
81e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
81f0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
8200: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
8230: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8260: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
8270: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
8280: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
82a0: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
82b0: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
82c0: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
82d0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
82e0: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
82f0: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
8300: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
8310: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
8340: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
8350: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
8360: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
8370: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
8380: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
8390: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
83a0: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
83b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
83c0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
83d0: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
83e0: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
8410: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
8420: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
8430: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
8440: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
8450: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
8460: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
8470: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
8480: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
84a0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
84b0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
84c0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
84d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
84e0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
84f0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
8500: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8520: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
8530: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
8540: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
8550: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
8560: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
8570: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
8580: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
8590: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
85a0: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
85b0: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
85c0: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
85d0: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
85e0: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8600: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
8610: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
8620: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
8630: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
8640: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
8650: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
8660: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
8670: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
8680: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
8690: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
86a0: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
86b0: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
86c0: 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78   TS */.  int nex
86d0: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
86e0: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
86f0: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
8700: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
8710: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
8720: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
8730: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
8740: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
8750: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
8760: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
8770: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
8780: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
8790: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
87a0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
87b0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
87c0: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
87d0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
87e0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
87f0: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
8800: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
8810: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73  /* Limits */.  s
8820: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
8830: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
8840: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
8850: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
8860: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
8870: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
8880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
8890: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
88a0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
88b0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
88e0: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
88f0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
8900: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
8910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8920: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
8930: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
8940: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
8950: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
8960: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
8970: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
8980: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
8990: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
89a0: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
89b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
89c0: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
89d0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
89e0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
89f0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
8a00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8a10: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
8a20: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
8a30: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
8a40: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
8a50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8a60: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
8a70: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
8a80: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
8a90: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
8aa0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8ab0: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
8ac0: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
8ad0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8af0: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
8b00: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
8b10: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
8b20: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
8b30: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
8b40: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
8b50: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
8b60: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
8b70: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
8b80: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
8b90: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
8ba0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bc0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
8bd0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
8be0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
8bf0: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
8c00: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
8c10: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
8c20: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
8c30: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
8c40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8c50: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
8c60: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
8c70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8c80: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ca0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
8cb0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
8cc0: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
8cd0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
8ce0: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
8cf0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
8d00: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
8d10: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8d30: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
8d40: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
8d50: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
8d60: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
8d70: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
8d80: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
8d90: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
8da0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
8db0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
8dc0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
8dd0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
8de0: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
8df0: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65  e_int64);.#ifnde
8e00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
8e10: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
8e20: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
8e30: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
8e40: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
8e50: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
8e60: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
8e70: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
8e80: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
8e90: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
8ea0: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
8eb0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
8ec0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
8ed0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
8ee0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
8ef0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
8f00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
8f10: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
8f20: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
8f30: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
8f40: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
8f50: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
8f60: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
8f70: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
8f80: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
8f90: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
8fa0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
8fb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
8fc0: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
8fd0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
8fe0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
8ff0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
9000: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
9010: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9020: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9030: 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75  TION.  int (*xAu
9040: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
9050: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9060: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9070: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
90b0: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
90c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
90d0: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
90e0: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
90f0: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
9100: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
9110: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
9120: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
9130: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
9140: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
9150: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
9160: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
9170: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
9180: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
9190: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
91a0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
91b0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
91c0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
91d0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
91e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
91f0: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
9200: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
9210: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
9220: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
9230: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
9240: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
9250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9260: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
9270: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
9280: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
9290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
92a0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
92b0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
92c0: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
92d0: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
92e0: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
92f0: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
9300: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
9310: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
9320: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
9330: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
9340: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
9350: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
9360: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
9370: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
9380: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
9390: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
93a0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
93b0: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
93c0: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
93d0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
93e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
93f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
9400: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
9410: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9420: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
9430: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
9440: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
9450: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
9460: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
9470: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
9480: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
9490: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
94a0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
94b0: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
94c0: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
94d0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
94e0: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
94f0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
9500: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
9510: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
9520: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
9530: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
9540: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9560: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
9570: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
9580: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
9590: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
95a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
95b0: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
95c0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
95d0: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
95e0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
95f0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
9600: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
9610: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
9620: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
9630: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
9640: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
9650: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
9660: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
9670: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
9680: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
9690: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
96a0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
96b0: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a  in DbFree() */..
96c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
96d0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
96e0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
96f0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
9700: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
9710: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
9720: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
9730: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
9740: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
9750: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
9760: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
9770: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
9780: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
9790: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
97a0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
97b0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
97c0: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
97d0: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
97e0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
97f0: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
9800: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
9810: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
9820: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
9830: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
9840: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
9850: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
9860: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
9870: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
9880: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
9890: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
98a0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
98b0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
98c0: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
98d0: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
98e0: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
98f0: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
9900: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
9910: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
9920: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
9930: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9950: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
9960: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
9970: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
9980: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
9990: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
99a0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
99b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
99c0: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
99d0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
99e0: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
99f0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
9a00: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
9a10: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
9a20: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
9a30: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
9a40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43  ..*/.#define ENC
9a50: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
9a60: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
9a70: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
9a80: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
9a90: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
9aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9ab0: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
9ac0: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
9ad0: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
9ae0: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
9af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
9b00: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
9b10: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
9b20: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
9b30: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
9b40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
9b50: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
9b60: 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20 66  000004  /* Use f
9b70: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
9b80: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
9b90: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
9ba0: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
9bb0: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
9bc0: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
9bd0: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
9be0: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
9bf0: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
9c00: 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  10  /* OK to spi
9c10: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
9c20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c30: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
9c40: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 53  0x00000020  /* S
9c50: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
9c60: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
9c70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9c80: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
9c90: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
9ca0: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
9cb0: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
9cc0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
9cd0: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
9ce0: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
9cf0: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
9d00: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
9d40: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
9d50: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
9d90: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
9da0: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
9db0: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
9dc0: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
9dd0: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
9de0: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
9df0: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
9e30: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
9e40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
9e50: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
9e60: 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00200  /* Debug 
9e70: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
9e80: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
9e90: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
9ea0: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
9eb0: 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0400  /* Debug l
9ec0: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
9ed0: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
9ee0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
9ef0: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
9f00: 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0800  /* OK to u
9f10: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
9f20: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
9f30: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
9f40: 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20  race 0x00001000 
9f50: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
9f60: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
9f70: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
9f80: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
9f90: 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20  s   0x00002000  
9fa0: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
9fb0: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
9fc0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
9fd0: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
9fe0: 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20  itted 0x0004000 
9ff0: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
a000: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
a010: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
a020: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
a030: 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  08000  /* Create
a040: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
a050: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
a060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
a070: 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30  overyMode   0x00
a080: 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72  010000  /* Ignor
a090: 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20  e schema errors 
a0a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a0b0: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
a0c0: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
a0d0: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
a0e0: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
a0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
a100: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
a110: 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  40000  /* Enable
a120: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
a130: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
a140: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
a150: 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20  s    0x00080000 
a160: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
a170: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a180: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
a190: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
a1a0: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
a1b0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
a1c0: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
a1d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a1e0: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
a1f0: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72  x00200000  /* Pr
a200: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
a210: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
a220: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
a230: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
a240: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
a250: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
a260: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a270: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
a280: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
a290: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
a2a0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
a2b0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
a2c0: 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30  FKs       0x0100
a2d0: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
a2e0: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
a2f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
a300: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
a310: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
a320: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
a330: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
a340: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
a350: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34  eEQP        0x04
a360: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
a370: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
a380: 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42  LAN */.../*.** B
a390: 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  its of the sqlit
a3a0: 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69  e3.dbOptFlags fi
a3b0: 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65  eld that are use
a3c0: 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  d by the.** sqli
a3d0: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
a3e0: 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
a3f0: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e  _OPTIMIZATIONS,.
a400: 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ..) interface to
a410: 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20  .** selectively 
a420: 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20  disable various 
a430: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
a440: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a450: 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20  _QueryFlattener 
a460: 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72  0x0001   /* Quer
a470: 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a  y flattening */.
a480: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
a490: 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78  olumnCache    0x
a4a0: 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  0002   /* Column
a4b0: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
a4c0: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
a4d0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
a4e0: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
a4f0: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
a500: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a510: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
a520: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
a530: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
a540: 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /*              
a550: 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78    not used    0x
a560: 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53  0010   // Was: S
a570: 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49  QLITE_IdxRealAsI
a580: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
a590: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
a5a0: 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20      0x0020   /* 
a5b0: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
a5c0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
a5d0: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
a5e0: 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20  xScan   0x0040  
a5f0: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
a600: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
a610: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
a620: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30  ByIdxJoin 0x0080
a630: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
a640: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
a650: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
a660: 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e  ITE_SubqCoroutin
a670: 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45  e  0x0100   /* E
a680: 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69  valuate subqueri
a690: 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73  es as coroutines
a6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a6b0: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
a6c0: 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72    0x0200   /* Tr
a6d0: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
a6e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
a6f0: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
a700: 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f  oin   0x0400   /
a710: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
a720: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
a730: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a740: 53 74 61 74 33 20 20 20 20 20 20 20 20 20 20 30  Stat3          0
a750: 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74  x0800   /* Use t
a760: 68 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20  he SQLITE_STAT3 
a770: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
a780: 20 53 51 4c 49 54 45 5f 41 64 6a 75 73 74 4f 75   SQLITE_AdjustOu
a790: 74 45 73 74 20 20 20 30 78 31 30 30 30 20 20 20  tEst   0x1000   
a7a0: 2f 2a 20 41 64 6a 75 73 74 20 6f 75 74 70 75 74  /* Adjust output
a7b0: 20 65 73 74 69 6d 61 74 65 73 20 75 73 69 6e 67   estimates using
a7c0: 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
a7d0: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
a7e0: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
a7f0: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
a800: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
a810: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
a820: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
a830: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
a840: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
a850: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
a860: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a870: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
a880: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
a890: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
a8a0: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
a8b0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
a8c0: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
a8d0: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
a8e0: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
a8f0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
a900: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
a910: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
a920: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
a930: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
a940: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
a950: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
a960: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
a970: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
a980: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
a990: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
a9a0: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
a9b0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
a9c0: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
a9d0: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
a9e0: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
a9f0: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
aa00: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
aa10: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
aa20: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
aa30: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
aa40: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
aa50: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
aa60: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
aa70: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
aa80: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
aa90: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
aaa0: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
aab0: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
aac0: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
aad0: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
aae0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
aaf0: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
ab00: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
ab10: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
ab20: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
ab30: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
ab40: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
ab50: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
ab60: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
ab70: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
ab80: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
ab90: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
aba0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
abb0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
abc0: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
abd0: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
abe0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
abf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ac00: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
ac10: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
ac20: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
ac30: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
ac40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ac50: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
ac60: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
ac70: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
ac80: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
ac90: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
aca0: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
acb0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
acc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
acd0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
ace0: 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74    A pointer to t
acf0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
ad00: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
ad10: 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68  qlite.aFunc.** h
ad20: 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e  ash table.  When
ad30: 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69   multiple functi
ad40: 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d  ons have the sam
ad50: 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68  e name, the hash
ad60: 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73   table.** points
ad70: 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   to a linked lis
ad80: 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  t of these struc
ad90: 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tures..*/.struct
ada0: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36   FuncDef {.  i16
adb0: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
adc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
add0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
ade0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
adf0: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
ae00: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
ae10: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
ae20: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
ae30: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
ae40: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
ae50: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
ae60: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
ae70: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
ae80: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
ae90: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
aea0: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
aeb0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
aec0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
aed0: 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e  ; /* Regular fun
aee0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
aef0: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
af00: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
af10: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
af20: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65  /* Aggregate ste
af30: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
af40: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
af50: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
af60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
af70: 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65  gregate finalize
af80: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  r */.  char *zNa
af90: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  me;         /* S
afa0: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
afb0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75  unction. */.  Fu
afc0: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
afd0: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
afe0: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
aff0: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
b000: 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74  sh */.  FuncDest
b010: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
b020: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
b030: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
b040: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
b050: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
b060: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
b070: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
b080: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
b090: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
b0a0: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
b0b0: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
b0c0: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
b0d0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
b0e0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
b0f0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
b100: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
b110: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
b120: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
b130: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
b140: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
b150: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
b160: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
b170: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a  nRef is set to .
b180: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
b190: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
b1a0: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
b1b0: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
b1c0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
b1d0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
b1e0: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
b1f0: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
b200: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
b210: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
b220: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
b230: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
b240: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
b250: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
b260: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
b270: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
b280: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
b290: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
b2a0: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
b2b0: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
b2c0: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
b2d0: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
b2e0: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
b2f0: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
b300: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
b310: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
b320: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
b330: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
b340: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
b350: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
b360: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
b370: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
b380: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
b390: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
b3a0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
b3b0: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
b3c0: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
b3d0: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
b3e0: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
b3f0: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
b400: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
b410: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
b420: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54  AG_TYPEOFARG.  T
b430: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
b440: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
b450: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
b460: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23  erify this..*/.#
b470: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b480: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30  NC_ENCMASK  0x00
b490: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
b4a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
b4b0: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
b4c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
b4d0: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
b4e0: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
b4f0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
b500: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
b510: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
b520: 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f  CASE     0x008 /
b530: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
b540: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
b550: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b560: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
b570: 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68      0x010 /* Eph
b580: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
b590: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
b5a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
b5b0: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20  _NEEDCOLL 0x020 
b5c0: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
b5d0: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
b5e0: 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64   be called */.#d
b5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b600: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30  C_LENGTH   0x040
b610: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
b620: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
b630: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b640: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
b650: 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x080 /* Built-in
b660: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
b670: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
b680: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
b690: 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c     0x100 /* Buil
b6a0: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
b6b0: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
b6c0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
b6d0: 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a  OALESCE 0x200 /*
b6e0: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
b6f0: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
b700: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b710: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
b720: 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x400 /* Built-
b730: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
b740: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
b750: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
b760: 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20  NSTANT 0x800 /* 
b770: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
b780: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
b790: 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  output */../*.**
b7a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
b7b0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
b7c0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
b7d0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
b7e0: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
b7f0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
b800: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
b810: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
b820: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
b830: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
b840: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
b850: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
b860: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
b870: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
b880: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
b890: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
b8a0: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
b8b0: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
b8c0: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
b8d0: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
b8e0: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
b8f0: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
b900: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
b910: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
b920: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
b930: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
b940: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
b950: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
b960: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
b970: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
b980: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
b990: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
b9a0: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
b9b0: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
b9c0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
b9d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
b9e0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
b9f0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
ba00: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
ba10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
ba20: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
ba30: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
ba40: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
ba50: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
ba60: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
ba70: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
ba80: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
ba90: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
baa0: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
bab0: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
bac0: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
bad0: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
bae0: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
baf0: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
bb00: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
bb10: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
bb20: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
bb30: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
bb40: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
bb50: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
bb60: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
bb70: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
bb80: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
bb90: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
bba0: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
bbb0: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
bbc0: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
bbd0: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
bbe0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
bbf0: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
bc00: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
bc10: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
bc20: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
bc30: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
bc40: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
bc50: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
bc60: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
bc70: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
bc80: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
bc90: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
bca0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
bcb0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
bcc0: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
bcd0: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
bce0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
bcf0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
bd00: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
bd10: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
bd20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
bd30: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
bd40: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
bd50: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
bd60: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
bd70: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
bd80: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
bd90: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
bda0: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
bdb0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
bdc0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
bdd0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
bde0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
bdf0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
be00: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
be10: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
be20: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
be30: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
be40: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
be50: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
be60: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
be70: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
be80: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
be90: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
bea0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
beb0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
bec0: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
bed0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
bee0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
bef0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
bf00: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
bf10: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
bf20: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
bf30: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
bf40: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
bf50: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
bf60: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
bf70: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
bf80: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
bf90: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
bfa0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
bfb0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
bfc0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
bfd0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
bfe0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
bff0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
c000: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
c010: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
c020: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c030: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c040: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
c050: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
c060: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
c070: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
c080: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
c090: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
c0a0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
c0b0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
c0c0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
c0d0: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f  l,#zName,0,0}../
c0e0: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
c0f0: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
c100: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
c110: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
c120: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
c130: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
c140: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
c150: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
c160: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
c170: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
c180: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
c190: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
c1a0: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
c1b0: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
c1c0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
c1d0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
c1e0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
c1f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c200: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
c210: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
c220: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
c230: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
c240: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
c250: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c260: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
c270: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
c280: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
c290: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
c2a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
c2b0: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
c2c0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
c2d0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
c2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
c2f0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
c300: 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
c310: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
c320: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
c330: 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
c340: 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
c350: 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
c360: 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
c370: 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
c380: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
c390: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
c3a0: 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
c3b0: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
c3c0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
c3d0: 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
c3e0: 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
c3f0: 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
c400: 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
c410: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
c420: 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
c430: 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
c440: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
c450: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
c460: 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
c470: 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
c480: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
c490: 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
c4a0: 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
c4b0: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
c4c0: 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
c4d0: 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
c4e0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
c4f0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
c500: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
c510: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
c520: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
c530: 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
c560: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
c570: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
c580: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
c590: 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
c5a0: 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
c5b0: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
c5c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
c5d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
c5e0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
c5f0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
c600: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
c610: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
c620: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
c630: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
c640: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
c650: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
c660: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
c670: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
c680: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
c690: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
c6a0: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
c6b0: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
c6c0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
c6d0: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
c6e0: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
c6f0: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
c700: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
c710: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
c720: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
c730: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
c740: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
c750: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
c760: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
c770: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
c780: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
c790: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
c7a0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
c7b0: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
c7c0: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
c7d0: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
c7e0: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
c7f0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
c800: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
c810: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
c820: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
c830: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
c840: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
c850: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
c860: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
c870: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
c880: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
c890: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
c8a0: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
c8b0: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
c8c0: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
c8d0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
c8e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
c8f0: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
c900: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
c910: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
c920: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
c930: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
c940: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
c950: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
c960: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
c970: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
c980: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
c990: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
c9a0: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
c9b0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
c9c0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
c9d0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
c9e0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
c9f0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
ca00: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
ca10: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
ca20: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
ca30: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
ca40: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
ca50: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
ca60: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
ca70: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
ca80: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
ca90: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
caa0: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
cab0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
cac0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
cad0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
cae0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
caf0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
cb00: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
cb10: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
cb20: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
cb30: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
cb40: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
cb50: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
cb60: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
cb70: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
cb80: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
cb90: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
cba0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
cbb0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
cbc0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
cbd0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
cbe0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
cbf0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
cc00: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
cc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc20: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
cc30: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
cc40: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
cc50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
cc60: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
cc70: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
cc80: 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  g order */../*.*
cc90: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
cca0: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
ccb0: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
ccc0: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
ccd0: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
cce0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ccf0: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
cd00: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
cd10: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
cd20: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
cd30: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
cd40: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
cd50: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
cd60: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
cd70: 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a  utively.  .**.**
cd80: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
cd90: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
cda0: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
cdb0: 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61 79  h 'a'.  That way
cdc0: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
cdd0: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
cde0: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
cdf0: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
ce00: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
ce10: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
ce20: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
ce30: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
ce40: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
ce50: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
ce60: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
ce70: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
ce80: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
ce90: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
cea0: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
ceb0: 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ison..*/.#define
cec0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
ced0: 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65       'a'.#define
cee0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
cef0: 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65       'b'.#define
cf00: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
cf10: 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65  RIC  'c'.#define
cf20: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
cf30: 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65  GER  'd'.#define
cf40: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
cf50: 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e       'e'..#defin
cf60: 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
cf70: 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
cf80: 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
cf90: 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
cfa0: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
cfb0: 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
cfc0: 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
cfd0: 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
cfe0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
cff0: 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e. .*/.#define S
d000: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
d010: 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x67../*.** A
d020: 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
d030: 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
d040: 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
d050: 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
d060: 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
d070: 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
d080: 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
d090: 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
d0a0: 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
d0b0: 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
d0c0: 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
d0d0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
d0e0: 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
d0f0: 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
d100: 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
d110: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
d120: 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
d130: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
d140: 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
d150: 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
d160: 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
d170: 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
d180: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
d190: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
d1a0: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
d1b0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d1c0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
d1d0: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
d1e0: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
d1f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
d200: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
d210: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
d220: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
d230: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
d240: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
d250: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
d260: 20 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73 73      0x88  /* Ass
d270: 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
d280: 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
d290: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
d2a0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
d2b0: 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
d2c0: 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
d2d0: 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
d2e0: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
d2f0: 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  chema. .**.** If
d300: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d310: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
d320: 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
d330: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
d340: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
d350: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
d360: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
d370: 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
d380: 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
d390: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
d3a0: 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
d3b0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d3c0: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
d3d0: 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
d3e0: 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
d3f0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
d400: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
d410: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
d420: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
d430: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
d440: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
d450: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
d460: 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61  tween .** databa
d470: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
d480: 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
d490: 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
d4a0: 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ory database .**
d4b0: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
d4c0: 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
d4d0: 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
d4e0: 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
d4f0: 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
d500: 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
d510: 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
d520: 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
d530: 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
d540: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
d550: 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
d560: 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
d570: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
d580: 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20   may.** then be 
d590: 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74  used by the virt
d5a0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
d5b0: 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65  entation to acce
d5c0: 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a  ss real tables .
d5d0: 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
d5e0: 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
d5f0: 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
d600: 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
d610: 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  rs .** transacti
d620: 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
d630: 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
d640: 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
d650: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e  database .** con
d660: 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
d670: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
d680: 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
d690: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
d6a0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
d6b0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
d6c0: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
d6d0: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
d6e0: 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
d6f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
d700: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
d710: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
d720: 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
d730: 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
d740: 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
d750: 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
d760: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
d770: 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
d780: 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
d790: 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
d7a0: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
d7b0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
d7c0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
d7d0: 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
d7e0: 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
d7f0: 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
d800: 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
d810: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d820: 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
d830: 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
d840: 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
d850: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
d860: 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
d870: 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
d880: 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
d890: 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
d8a0: 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
d8b0: 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
d8c0: 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
d8d0: 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
d8e0: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
d8f0: 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
d900: 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20  cts are not .** 
d910: 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
d920: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
d930: 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
d940: 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a  isconnect()ed .*
d950: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
d960: 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
d970: 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
d980: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
d990: 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
d9a0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
d9b0: 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
d9c0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
d9d0: 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
d9e0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
d9f0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
da00: 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
da10: 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
da20: 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69  cted .** next ti
da30: 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
da40: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
da50: 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
da60: 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
da70: 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
da80: 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
da90: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
daa0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
dab0: 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
dac0: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
dad0: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
dae0: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
daf0: 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
db00: 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
db10: 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
db20: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
db30: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
db40: 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
db50: 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
db60: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
db70: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
db80: 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
db90: 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
dba0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
dbb0: 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
dbc0: 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44   by .** sqlite3D
dbd0: 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
dbe0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
dbf0: 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
dc00: 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a   VTable.db as .*
dc10: 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
dc20: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
dc30: 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
dc40: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
dc50: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
dc60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
dc70: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
dc80: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
dc90: 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
dca0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
dcb0: 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
dcc0: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
dcd0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
dce0: 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
dcf0: 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
dd00: 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
dd10: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
dd20: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
dd30: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
dd40: 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
dd50: 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
dd60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
dd70: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
dd80: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
dd90: 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
dda0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
ddb0: 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
ddc0: 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
ddd0: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
dde0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
ddf0: 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
de00: 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
de10: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
de20: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  ch SQL table is 
de30: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
de40: 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74  emory by an inst
de50: 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66  ance of the.** f
de60: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
de70: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  re..**.** Table.
de80: 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  zName is the nam
de90: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  e of the table. 
dea0: 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65   The case of the
deb0: 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45   original.** CRE
dec0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
ded0: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62  ent is stored, b
dee0: 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73  ut case is not s
def0: 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a  ignificant for.*
df00: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a  * comparisons..*
df10: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20  *.** Table.nCol 
df20: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
df30: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
df40: 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61   table.  Table.a
df50: 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  Col is a.** poin
df60: 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20  ter to an array 
df70: 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74  of Column struct
df80: 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61  ures, one for ea
df90: 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  ch column..**.**
dfa0: 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61   If the table ha
dfb0: 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  s an INTEGER PRI
dfc0: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54  MARY KEY, then T
dfd0: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68  able.iPKey is th
dfe0: 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68  e index of.** th
dff0: 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73  e column that is
e000: 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68   that key.   Oth
e010: 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b  erwise Table.iPK
e020: 65 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20  ey is negative. 
e030: 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68   Note.** that th
e040: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
e050: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75  e PRIMARY KEY mu
e060: 73 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f  st be INTEGER fo
e070: 72 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a  r this field to.
e080: 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49  ** be set.  An I
e090: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e0a0: 45 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68  EY is used as th
e0b0: 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e rowid for each
e0c0: 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74   row of.** the t
e0d0: 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c  able.  If a tabl
e0e0: 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52  e has no INTEGER
e0f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
e100: 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69  en a random rowi
e110: 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65  d.** is generate
e120: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
e130: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46  f the table.  TF
e140: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69  _HasPrimaryKey i
e150: 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20  s set if.** the 
e160: 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52  table has any PR
e170: 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47  IMARY KEY, INTEG
e180: 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e  ER or otherwise.
e190: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75  .**.** Table.tnu
e1a0: 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  m is the page nu
e1b0: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f  mber for the roo
e1c0: 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20  t BTree page of 
e1d0: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  the table in the
e1e0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
e1f0: 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62  e.  If Table.iDb
e200: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
e210: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
e220: 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69  ble backend.** i
e230: 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20  n sqlite.aDb[]. 
e240: 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61   0 is for the ma
e250: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
e260: 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c  1 is for the fil
e270: 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20  e that.** holds 
e280: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
e290: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49   and indices.  I
e2a0: 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69  f TF_Ephemeral i
e2b0: 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68  s set.** then th
e2c0: 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65  e table is store
e2d0: 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74  d in a file that
e2e0: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
e2f0: 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65  y deleted.** whe
e300: 6e 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f  n the VDBE curso
e310: 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69  r to the table i
e320: 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68  s closed.  In th
e330: 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e  is case Table.tn
e340: 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44  um .** refers VD
e350: 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
e360: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
e370: 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20  table open, not 
e380: 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70  to the root.** p
e390: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61  age number.  Tra
e3a0: 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72  nsient tables ar
e3b0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
e3c0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a  he results of a.
e3d0: 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61  ** sub-query tha
e3e0: 74 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61  t appears instea
e3f0: 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  d of a real tabl
e400: 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52  e name in the FR
e410: 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66  OM clause .** of
e420: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
e430: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ent..*/.struct T
e440: 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
e450: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
e460: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
e470: 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
e480: 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
e490: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
e4a0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
e4b0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
e4c0: 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
e4d0: 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
e4e0: 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
e4f0: 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
e500: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
e510: 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
e520: 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
e530: 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
e540: 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
e550: 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
e560: 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
e570: 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
e580: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
e590: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
e5a0: 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
e5b0: 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
e5c0: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
e5d0: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e  h column */.#ifn
e5e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e5f0: 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74  CHECK.  ExprList
e600: 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
e610: 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
e620: 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  aints */.#endif.
e630: 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
e640: 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  t;     /* Estima
e650: 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
e660: 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
e670: 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
e680: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
e690: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
e6a0: 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69  ree node for thi
e6b0: 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74  s table (see not
e6c0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31  e above) */.  i1
e6d0: 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  6 iPKey;        
e6e0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
e6f0: 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
e700: 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72  iPKey] as the pr
e710: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69  imary key */.  i
e720: 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
e730: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e740: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
e750: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20   table */.  u16 
e760: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
e770: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
e780: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
e790: 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
e7a0: 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
e7b0: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
e7c0: 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
e7d0: 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ow in bytes */. 
e7e0: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
e7f0: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
e800: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
e810: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
e820: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
e830: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
e840: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
e850: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
e860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e870: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
e880: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
e890: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
e8a0: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
e8b0: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
e8c0: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
e8d0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
e8e0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
e8f0: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
e900: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
e910: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
e920: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
e930: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
e940: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
e950: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
e960: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
e970: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
e980: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
e990: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
e9a0: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
e9b0: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
e9c0: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
e9d0: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
e9e0: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
e9f0: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
ea00: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
ea10: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
ea20: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
ea30: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
ea40: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
ea50: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
ea60: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
ea70: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
ea80: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
ea90: 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
eaa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
eab0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
eac0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
ead0: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
eae0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
eaf0: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
eb00: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
eb10: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
eb20: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
eb30: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
eb40: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
eb50: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
eb60: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
eb70: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
eb80: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
eb90: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
eba0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
ebb0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
ebc0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
ebd0: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
ebe0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
ebf0: 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
ec00: 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
ec10: 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20   No rowid used. 
ec20: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
ec30: 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  he key */.../*.*
ec40: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
ec50: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
ec60: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
ec70: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
ec80: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
ec90: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
eca0: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
ecb0: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
ecc0: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
ecd0: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
ece0: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
ecf0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
ed00: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
ed10: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
ed20: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
ed30: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
ed40: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
ed50: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
ed60: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
ed70: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
ed80: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
ed90: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
eda0: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
edb0: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
edc0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
edd0: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  X) 0.#endif../* 
ede0: 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
edf0: 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
ee00: 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
ee10: 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
ee20: 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
ee30: 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  outRowid)==0)../
ee40: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
ee50: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
ee60: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
ee70: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
ee80: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
ee90: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
eea0: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
eeb0: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
eec0: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
eed0: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
eee0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
eef0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ef00: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
ef10: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
ef20: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
ef30: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
ef40: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
ef50: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
ef60: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
ef70: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
ef80: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
ef90: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
efa0: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
efb0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
efc0: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
efd0: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
efe0: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
eff0: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
f000: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
f010: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
f020: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
f030: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
f040: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
f050: 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
f060: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
f070: 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
f080: 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
f090: 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
f0a0: 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
f0b0: 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
f0c0: 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
f0d0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f0e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f0f0: 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
f100: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
f110: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
f120: 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
f130: 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
f140: 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
f150: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
f160: 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
f170: 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
f180: 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
f190: 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
f1a0: 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
f1b0: 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
f1c0: 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
f1d0: 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
f1e0: 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
f1f0: 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
f200: 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
f210: 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
f220: 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
f230: 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
f240: 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
f250: 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
f260: 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
f270: 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
f280: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
f290: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
f2a0: 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
f2b0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
f2c0: 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
f2d0: 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
f2e0: 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
f2f0: 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
f300: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
f310: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
f320: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
f330: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
f340: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
f350: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
f360: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
f370: 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
f380: 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
f390: 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
f3a0: 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
f3b0: 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
f3c0: 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
f3d0: 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
f3e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
f3f0: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
f400: 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
f410: 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
f420: 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
f430: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
f440: 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
f450: 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
f460: 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
f470: 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
f480: 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
f490: 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
f4a0: 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
f4b0: 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
f4c0: 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
f4d0: 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
f4e0: 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
f4f0: 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
f500: 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
f510: 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
f520: 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
f530: 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
f540: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
f550: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
f560: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
f570: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
f580: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
f590: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f5a0: 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
f5b0: 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
f5c0: 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
f5d0: 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
f5e0: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
f5f0: 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
f600: 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
f610: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
f620: 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
f630: 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
f640: 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
f650: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
f660: 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
f670: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
f680: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f690: 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
f6a0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
f6b0: 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
f6c0: 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
f6d0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
f6e0: 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
f6f0: 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
f700: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
f710: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
f720: 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
f730: 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
f740: 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
f750: 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
f760: 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
f770: 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
f780: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
f790: 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
f7a0: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
f7b0: 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
f7c0: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
f7d0: 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
f7e0: 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
f7f0: 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
f800: 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
f810: 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
f820: 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
f830: 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
f840: 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
f850: 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
f860: 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
f870: 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
f880: 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
f890: 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
f8a0: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
f8b0: 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
f8c0: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
f8d0: 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
f8e0: 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
f8f0: 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
f900: 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
f910: 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
f920: 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
f930: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f940: 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
f950: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
f960: 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
f970: 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
f980: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
f990: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
f9a0: 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
f9b0: 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
f9c0: 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
f9d0: 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
f9e0: 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
f9f0: 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
fa00: 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
fa10: 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
fa20: 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
fa30: 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
fa40: 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
fa50: 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
fa60: 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
fa70: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
fa80: 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
fa90: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
faa0: 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
fab0: 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
fac0: 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
fad0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
fae0: 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
faf0: 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
fb00: 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
fb10: 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
fb20: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
fb30: 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
fb40: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
fb50: 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
fb60: 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
fb70: 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
fb80: 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
fb90: 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
fba0: 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
fbb0: 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
fbc0: 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
fbd0: 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
fbe0: 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
fbf0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
fc00: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
fc10: 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
fc20: 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
fc30: 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
fc40: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
fc50: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
fc60: 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
fc70: 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
fc80: 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
fc90: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
fca0: 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
fcb0: 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
fcc0: 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
fcd0: 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
fce0: 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
fcf0: 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
fd00: 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
fd10: 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
fd20: 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
fd30: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
fd40: 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
fd50: 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
fd60: 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
fd70: 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
fd80: 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
fd90: 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
fda0: 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
fdb0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
fdc0: 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
fdd0: 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
fde0: 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
fdf0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
fe00: 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
fe10: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
fe20: 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
fe30: 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
fe40: 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
fe50: 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
fe60: 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
fe70: 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
fe80: 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
fe90: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
fea0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
feb0: 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
fec0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
fed0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
fee0: 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
fef0: 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
ff00: 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
ff10: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
ff20: 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
ff30: 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
ff40: 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
ff50: 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
ff60: 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
ff70: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
ff80: 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
ff90: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
ffa0: 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
ffb0: 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
ffc0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
ffd0: 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
ffe0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
fff0: 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
10000 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10010 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
10020 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
10030 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
10040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10050 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
10060 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
10070 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
10080 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
10090 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
100a0 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
100b0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
100c0 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20   u16 nXField;   
100d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
100e0 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64  f columns beyond
100f0 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73   the key columns
10100 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
10110 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
10120 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10130 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
10140 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
10150 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
10160 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
10170 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
10180 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
10190 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
101a0 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
101b0 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
101c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
101d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
101e0 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
101f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10200 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
10210 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
10220 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
10230 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
10240 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
10250 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
10260 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
10270 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
10280 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
10290 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
102a0 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
102b0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
102c0 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
102d0 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
102e0 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
102f0 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
10300 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
10310 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
10320 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
10330 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
10340 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
10350 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
10360 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
10370 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
10380 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
10390 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
103a0 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
103b0 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
103c0 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
103d0 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
103e0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  s..**.** The r1 
103f0 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61  and r2 member va
10400 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
10410 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74   used by the opt
10420 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f  imized compariso
10430 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76  n.** functions v
10440 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
10450 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65  Int() and vdbeRe
10460 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e  cordCompareStrin
10470 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  g()..*/.struct U
10480 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
10490 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
104a0 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
104b0 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
104c0 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
104d0 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
104e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
104f0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
10500 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
10510 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
10520 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
10530 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
10540 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 69   equal */.  u8 i
10550 73 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  sCorrupt;       
10560 2f 2a 20 43 6f 72 72 75 70 74 69 6f 6e 20 64 65  /* Corruption de
10570 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
10580 64 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20  dCompare() */.  
10590 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
105a0 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
105b0 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20  .  int r1;      
105c0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
105d0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68  to return if (lh
105e0 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e  s > rhs) */.  in
105f0 74 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  t r2;           
10600 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
10610 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c  turn if (rhs < l
10620 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a  hs) */.};.../*.*
10630 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
10640 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
10650 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
10660 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
10670 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10680 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
10690 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
106a0 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
106b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
106c0 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
106d0 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
106e0 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
106f0 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
10700 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
10710 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
10720 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
10730 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
10740 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
10750 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
10760 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
10770 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
10780 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
10790 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
107a0 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
107b0 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
107c0 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
107d0 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
107e0 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
107f0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
10800 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
10810 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
10820 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
10830 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
10840 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
10850 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
10860 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
10870 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
10880 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
10890 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a  =2 because the .
108a0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
108b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
108c0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
108d0 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
108e0 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
108f0 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
10900 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
10910 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
10920 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
10930 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
10940 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
10950 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
10960 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
10970 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
10980 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
10990 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
109a0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
109b0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
109c0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
109d0 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
109e0 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
109f0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
10a00 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
10a10 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
10a20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
10a30 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
10a40 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
10a50 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
10a60 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
10a70 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69  ution .** algori
10a80 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
10a90 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
10aa0 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
10ab0 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
10ac0 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a  .** element..*/.
10ad0 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
10ae0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10b00 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
10b10 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
10b20 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
10b30 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
10b40 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
10b50 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
10b60 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
10b70 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
10b80 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
10b90 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
10ba0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
10bb0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
10bc0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
10bd0 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
10be0 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
10bf0 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
10c00 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
10c10 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
10c20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
10c30 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
10c40 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
10c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
10c60 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
10c70 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
10c80 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
10c90 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
10ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
10cb0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
10cc0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
10cd0 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
10ce0 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
10cf0 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
10d00 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
10d10 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  C */.  char **az
10d20 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
10d30 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
10d40 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
10d50 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
10d60 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
10d70 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
10d80 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
10d90 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
10da0 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70   */.  KeyInfo *p
10db0 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20 20 20 2f  KeyInfo;       /
10dc0 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  * A KeyInfo obje
10dd0 63 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  ct suitable for 
10de0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
10df0 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
10e00 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50           /* DB P
10e10 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72  age containing r
10e20 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65  oot of this inde
10e30 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  x */.  LogEst sz
10e40 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20  IdxRow;         
10e50 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65  /* Estimated ave
10e60 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e  rage row size in
10e70 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20   bytes */.  u16 
10e80 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  nKeyCol;        
10e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10ea0 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e  f columns formin
10eb0 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75  g the key */.  u
10ec0 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 nColumn;     
10ed0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10ee0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f  r of columns sto
10ef0 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78  red in the index
10f00 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72   */.  u8 onError
10f10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
10f20 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49  * OE_Abort, OE_I
10f30 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63  gnore, OE_Replac
10f40 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f  e, or OE_None */
10f50 0a 20 20 75 6e 73 69 67 6e 65 64 20 61 75 74 6f  .  unsigned auto
10f60 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31  Index:2;    /* 1
10f70 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49  ==UNIQUE, 2==PRI
10f80 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45  MARY KEY, 0==CRE
10f90 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75  ATE INDEX */.  u
10fa0 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
10fb0 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
10fc0 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
10fd0 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
10fe0 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
10ff0 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
11000 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
11010 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
11020 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
11030 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
11040 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
11050 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
11060 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
11070 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
11080 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
11090 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
110a0 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
110b0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
110c0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
110d0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
110e0 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
110f0 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
11100 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
11110 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
11120 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
11130 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
11140 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
11150 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
11160 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
11170 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
11180 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
11190 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
111a0 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
111b0 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
111c0 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
111d0 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
111e0 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
111f0 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
11200 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
11210 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
11220 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
11230 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
11240 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
11250 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
11260 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
11270 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
11280 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
11290 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
112a0 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
112b0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
112c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
112d0 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
112e0 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
112f0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
11300 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
11310 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
11320 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11330 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
11340 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
11350 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
11360 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
11370 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
11380 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
11390 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
113a0 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
113b0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
113c0 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
113d0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
113e0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
113f0 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
11400 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
11410 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
11420 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
11430 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
11440 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d  * Each token com
11450 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  ing out of the l
11460 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61  exer is an insta
11470 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
11480 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e  tructure.  Token
11490 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20  s are also used 
114a0 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78  as part of an ex
114b0 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  pression..**.** 
114c0 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d  Note if Token.z=
114d0 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79  =0 then Token.dy
114e0 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72  n and Token.n ar
114f0 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a  e undefined and.
11500 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72  ** may contain r
11510 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44  andom values.  D
11520 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61  o not make any a
11530 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74  ssumptions about
11540 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e   Token.dyn.** an
11550 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54  d Token.n when T
11560 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74  oken.z==0..*/.st
11570 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
11580 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
11590 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
115a0 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
115b0 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
115c0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
115d0 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
115e0 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
115f0 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
11600 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
11610 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
11620 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
11630 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
11640 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
11650 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
11660 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
11670 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
11680 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
11690 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
116a0 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
116b0 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
116c0 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
116d0 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
116e0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
116f0 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
11700 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
11710 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
11720 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
11730 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
11740 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
11750 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
11760 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
11770 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
11780 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
11790 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
117a0 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
117b0 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
117c0 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
117d0 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
117e0 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
117f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
11800 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
11810 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
11820 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
11830 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
11840 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
11850 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
11860 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
11870 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
11880 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
11890 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
118a0 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
118b0 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
118d0 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
118e0 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
118f0 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
11900 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
11910 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
11920 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
11930 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
11940 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
11950 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11970 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
11980 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
11990 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
119a0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
119b0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
119c0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
119d0 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
119e0 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
119f0 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
11a00 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
11a10 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
11a20 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
11a30 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11a40 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
11a50 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
11a60 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
11a70 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
11a80 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
11a90 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
11aa0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
11ab0 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
11ac0 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
11ad0 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
11ae0 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
11af0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
11b00 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
11b10 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
11b20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
11b30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
11b40 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
11b50 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
11b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
11b70 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
11b80 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
11b90 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
11ba0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
11bb0 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
11bc0 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
11bd0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
11be0 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
11bf0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
11c00 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
11c10 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
11c20 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c40 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
11c50 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
11c60 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
11c70 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
11c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
11c90 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
11ca0 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
11cb0 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
11cc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11cd0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
11ce0 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
11cf0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
11d00 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
11d10 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11d20 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
11d30 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
11d40 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11d60 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
11d70 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
11d80 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
11d90 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11db0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
11dc0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
11dd0 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
11de0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
11df0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
11e00 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
11e10 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
11e20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
11e30 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
11e40 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
11e50 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
11e60 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
11e70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
11e80 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
11e90 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11eb0 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
11ec0 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
11ed0 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
11ee0 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
11ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
11f00 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
11f10 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
11f20 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
11f30 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11f50 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
11f60 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
11f70 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
11f80 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
11f90 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
11fa0 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
11fb0 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
11fc0 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
11fd0 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
11fe0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
11ff0 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
12000 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
12010 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
12020 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
12030 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
12040 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
12050 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
12060 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
12070 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
12080 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
12090 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
120a0 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
120b0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
120c0 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
120d0 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
120e0 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
120f0 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
12100 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
12110 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
12120 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
12130 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
12140 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
12150 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
12160 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
12170 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
12180 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
12190 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
121a0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
121b0 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
121c0 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
121d0 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
121e0 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
121f0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
12200 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
12210 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
12220 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
12230 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
12240 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
12250 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
12260 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
12270 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
12280 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
12290 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
122a0 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
122b0 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
122c0 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
122d0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
122e0 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
122f0 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
12300 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
12310 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
12320 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
12330 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
12340 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
12350 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
12360 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
12370 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
12380 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12390 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
123a0 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
123b0 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a  LOAT, TK_BLOB, .
123c0 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
123d0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
123e0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
123f0 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
12400 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
12410 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
12420 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
12430 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
12440 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
12450 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61  ns the .** varia
12460 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
12470 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
12480 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
12490 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
124a0 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
124b0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
124c0 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
124d0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
124e0 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
124f0 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
12500 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
12510 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
12520 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
12530 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
12540 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
12550 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
12560 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
12570 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
12580 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
12590 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
125a0 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
125b0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
125c0 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
125d0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
125e0 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
125f0 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
12600 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
12610 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
12620 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
12630 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
12640 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
12650 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
12660 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
12670 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
12680 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
12690 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
126a0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
126b0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
126c0 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
126d0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
126e0 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
126f0 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
12700 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
12710 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
12720 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
12730 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
12740 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
12750 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
12760 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
12770 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
12780 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
12790 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
127a0 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
127b0 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
127c0 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
127d0 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
127e0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
127f0 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
12800 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
12810 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
12820 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
12830 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
12840 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
12850 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
12860 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
12870 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
12880 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
12890 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
128a0 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
128b0 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
128c0 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
128d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
128e0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
128f0 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
12900 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
12910 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61  ion mark .** cha
12920 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
12930 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
12940 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
12950 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
12960 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  ndex .** number 
12970 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
12980 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
12990 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
129a0 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
129b0 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
129c0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
129d0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
129e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
129f0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
12a00 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
12a10 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
12a20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
12a30 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
12a40 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
12a50 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
12a60 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
12a70 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
12a80 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
12a90 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
12aa0 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
12ab0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
12ac0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
12ad0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
12ae0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
12af0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
12b00 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
12b10 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
12b20 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
12b30 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
12b40 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
12b50 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
12b60 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
12b70 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
12b80 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
12b90 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
12ba0 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
12bb0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
12bc0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
12bd0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
12be0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
12bf0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
12c00 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
12c10 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
12c20 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
12c30 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
12c40 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
12c50 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
12c60 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
12c70 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
12c80 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
12c90 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
12ca0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
12cb0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
12cc0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
12cd0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
12ce0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
12cf0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
12d00 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
12d10 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
12d20 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
12d30 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
12d40 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
12d50 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
12d60 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
12d70 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
12d80 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
12d90 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
12da0 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
12db0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
12dc0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
12dd0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
12de0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
12df0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
12e00 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
12e10 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
12e20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
12e30 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
12e40 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
12e50 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
12e60 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
12e70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
12e80 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
12e90 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
12ea0 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ec0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
12ed0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
12ee0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
12ef0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
12f00 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
12f10 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
12f20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
12f30 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
12f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
12f50 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
12f60 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
12f70 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
12f80 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
12f90 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
12fa0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
12fb0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
12fc0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
12fd0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
12fe0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
12ff0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
13000 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
13010 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
13020 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
13030 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
13040 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
13050 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
13060 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
13070 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
13080 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
13090 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
130a0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
130b0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
130c0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
130d0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20  or malfunction. 
130e0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
130f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13120 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
13130 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
13140 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
13150 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
13160 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
13170 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
13180 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
13190 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
131a0 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
131b0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
131c0 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
131d0 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
131e0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
131f0 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
13200 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
13210 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
13220 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
13230 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
13240 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
13250 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
13260 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
13270 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
13280 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
13290 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
132a0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
132b0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
132c0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
132d0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
132e0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
132f0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
13300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
13340 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
13350 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
13360 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
13370 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
13380 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
13390 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
133a0 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
133b0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
133c0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
133d0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
133e0 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
133f0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
13400 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13410 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
13420 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
13450 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
13460 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
13490 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b 65   1000 times like
134a0 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61  lihood */.  ynVa
134b0 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
134c0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
134d0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
134e0 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
13510 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
13520 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
13530 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
13540 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
13550 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
13560 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
13570 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
13580 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
13590 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
135a0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
135b0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
135c0 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
135d0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
135e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
135f0 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
13600 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
13610 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
13620 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
13630 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
13640 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
13650 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
13680 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
13690 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
136a0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
136b0 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
136c0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
136d0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
136e0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
136f0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
13700 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
13710 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
13720 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
13730 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
13740 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
13750 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
13760 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
13770 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
13780 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
13790 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72  ginated in ON or
137a0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
137b0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69   a join */.#defi
137c0 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
137d0 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
137e0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
137f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13800 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
13810 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
13820 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
13830 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
13840 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
13850 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
13860 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
13870 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
13880 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
13890 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
138a0 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
138b0 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
138c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
138d0 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
138e0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
138f0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
13900 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
13910 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
13920 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
13930 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
13940 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
13950 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
13960 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
13970 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
13980 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
13990 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
139a0 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
139b0 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
139c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
139d0 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
139e0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
139f0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
13a00 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
13a10 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
13a20 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
13a30 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
13a40 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
13a50 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
13a60 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
13a70 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
13a80 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
13a90 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
13aa0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
13ab0 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
13ac0 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13ad0 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
13ae0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
13af0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
13b00 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
13b10 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
13b20 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
13b30 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
13b40 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
13b50 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
13b60 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
13b70 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
13b80 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
13b90 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
13ba0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
13bb0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
13bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
13bd0 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
13be0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
13bf0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
13c00 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
13c10 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
13c20 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
13c30 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
13c40 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
13c50 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
13c60 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
13c70 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
13c80 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
13c90 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
13ca0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
13cb0 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
13cc0 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
13cd0 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
13ce0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
13cf0 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30  Constant  0x0800
13d00 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
13d10 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a  constant */../*.
13d20 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
13d30 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
13d40 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
13d50 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
13d60 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
13d70 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
13d80 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
13d90 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
13da0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
13db0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
13dc0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
13dd0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
13de0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
13df0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
13e00 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
13e10 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
13e20 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
13e30 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
13e40 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
13e50 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
13e60 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
13e70 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
13e80 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
13e90 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
13ea0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
13eb0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
13ec0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
13ed0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
13ee0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
13ef0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
13f00 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
13f10 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
13f20 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
13f30 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
13f40 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
13f50 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
13f60 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
13f70 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
13f80 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
13f90 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
13fa0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
13fb0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
13fc0 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
13fd0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
13fe0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
13ff0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
14000 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
14010 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
14020 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
14030 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
14040 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
14050 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
14060 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
14070 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
14080 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
14090 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
140a0 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
140b0 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
140c0 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
140d0 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
140e0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
140f0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
14100 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
14110 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
14120 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
14130 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
14140 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
14150 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
14160 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
14170 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
14180 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
14190 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
141a0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
141b0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
141c0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
141d0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
141e0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
141f0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
14200 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
14210 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
14220 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
14230 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
14240 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
14250 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
14260 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
14270 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
14280 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
14290 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
142a0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
142b0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
142c0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
142d0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
142e0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
142f0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
14300 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
14310 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
14320 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
14330 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
14340 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
14350 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
14360 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
14370 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
14380 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
14390 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
143a0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
143b0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
143c0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
143d0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
143e0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
143f0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
14400 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
14410 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
14420 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
14430 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
14440 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
14450 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
14460 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
14470 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
14480 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
14490 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
144a0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
144b0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
144c0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
144d0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
144e0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
144f0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
14500 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
14510 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
14520 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
14530 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
14540 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
14550 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
14560 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
14570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14580 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
14590 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
145a0 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
145b0 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
145c0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
145d0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
145e0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
145f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14600 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
14610 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
14620 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14630 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
14640 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
14650 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
14660 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
14670 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14680 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
14690 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
146a0 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
146b0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
146c0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
146d0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
146e0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
146f0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
14700 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
14710 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
14720 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
14730 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
14740 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
14750 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
14760 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
14770 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
14780 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
14790 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
147a0 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
147b0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
147c0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
147d0 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
147e0 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52  ;      /* For OR
147f0 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e  DER BY, column n
14800 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20  umber in result 
14810 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75  set */.        u
14820 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
14830 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
14840 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
14850 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
14860 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20       } x;.      
14870 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65  int iConstExprRe
14880 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73  g;      /* Regis
14890 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70  ter in which Exp
148a0 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65  r value is cache
148b0 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20  d */.    } u;.  
148c0 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
148d0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
148e0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
148f0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
14900 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
14910 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
14920 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
14930 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
14940 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
14950 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
14960 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
14970 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
14980 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
14990 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
149a0 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
149b0 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
149c0 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
149d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
149e0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
149f0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
14a00 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
14a10 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
14a20 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
14a30 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
14a40 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
14a50 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
14a60 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
14a70 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
14a80 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
14a90 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
14aa0 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
14ab0 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
14ac0 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
14ad0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
14ae0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
14af0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
14b00 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
14b10 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
14b20 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
14b30 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
14b40 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
14b50 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
14b60 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
14b70 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
14b80 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
14b90 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
14ba0 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
14bb0 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
14bc0 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
14bd0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
14be0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
14bf0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
14c00 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
14c10 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
14c20 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
14c30 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
14c40 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
14c50 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
14c60 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
14c70 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
14c80 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
14c90 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
14ca0 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
14cb0 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
14cc0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
14cd0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14ce0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
14cf0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
14d00 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14d10 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
14d20 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
14d30 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
14d40 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
14d50 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
14d60 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
14d70 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
14d80 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
14d90 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
14da0 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
14db0 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
14dc0 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
14dd0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
14de0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
14df0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
14e00 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
14e10 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
14e20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
14e30 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
14e40 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
14e50 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
14e60 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
14e70 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
14e80 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
14e90 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
14ea0 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
14eb0 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
14ec0 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
14ed0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
14ee0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
14ef0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
14f00 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
14f10 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
14f20 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
14f30 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
14f40 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
14f50 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
14f60 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
14f70 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
14f80 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  )<<(n))../*.** T
14f90 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14fa0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
14fb0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
14fc0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
14fd0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
14fe0 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
14ff0 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
15000 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
15010 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
15020 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
15030 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
15040 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
15050 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
15060 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
15070 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
15080 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
15090 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
150a0 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
150b0 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
150c0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
150d0 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
150e0 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
150f0 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
15100 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
15110 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
15120 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
15130 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
15140 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
15150 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
15160 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
15170 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
15180 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
15190 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
151a0 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
151b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
151c0 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
151d0 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
151e0 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
151f0 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
15200 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
15210 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
15220 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
15230 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
15240 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
15250 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
15260 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
15270 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
15280 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
15290 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
152a0 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
152b0 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
152c0 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
152d0 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
152e0 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
152f0 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
15300 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
15310 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
15320 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
15330 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
15340 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
15350 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
15360 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
15370 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
15380 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
15390 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
153a0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
153b0 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
153c0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
153d0 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
153e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
153f0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
15400 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
15410 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
15420 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
15430 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
15440 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
15450 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
15460 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
15470 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
15480 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
15490 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
154a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
154b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
154c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
154d0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
154e0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
154f0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
15500 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
15510 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
15520 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
15530 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
15540 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
15550 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
15560 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
15570 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
15580 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
15590 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
155a0 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
155b0 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
155c0 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
155d0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
155e0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
155f0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
15600 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
15610 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
15620 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
15630 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
15640 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
15650 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
15660 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
15670 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
15680 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
15690 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
156a0 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
156b0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
156c0 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
156d0 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
156e0 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
156f0 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
15700 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
15710 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
15720 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  use */.    unsig
15730 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
15740 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
15750 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
15760 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
15770 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
15780 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
15790 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
157a0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
157b0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
157c0 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
157d0 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
157e0 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
157f0 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ITH */.#ifndef S
15800 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
15810 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
15820 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
15830 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
15840 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
15850 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
15860 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
15870 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
15880 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
15890 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
158a0 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
158b0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
158c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
158d0 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
158e0 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
158f0 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
15900 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
15910 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
15920 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
15930 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
15940 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
15950 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
15960 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
15970 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
15980 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
15990 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
159a0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
159b0 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
159c0 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
159d0 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
159e0 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
159f0 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
15a00 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
15a10 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
15a20 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
15a30 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
15a40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
15a50 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
15a60 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
15a70 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
15a80 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
15a90 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
15aa0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
15ab0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
15ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
15ad0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
15ae0 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
15af0 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
15b00 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
15b10 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
15b20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
15b30 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
15b40 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
15b50 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
15b60 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
15b70 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
15b80 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
15b90 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
15ba0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
15bb0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
15bc0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
15bd0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
15be0 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
15bf0 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
15c00 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
15c10 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
15c20 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
15c30 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
15c40 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
15c50 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
15c60 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
15c70 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
15c80 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
15c90 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
15ca0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
15cb0 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
15cc0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
15cd0 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
15ce0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
15cf0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
15d00 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
15d10 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
15d20 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
15d30 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
15d40 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
15d50 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
15d60 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
15d70 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
15d80 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
15d90 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
15da0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
15db0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
15dc0 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
15dd0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
15de0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
15df0 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
15e00 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
15e10 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
15e20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15e30 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
15e40 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
15e50 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
15e60 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
15e70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
15e80 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
15e90 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
15ea0 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
15eb0 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
15ec0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
15ed0 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
15ee0 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
15ef0 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
15f00 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
15f10 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c  ne WHERE_AND_ONL
15f20 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30  Y         0x0080
15f30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e   /* Don't use in
15f40 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72  dices for OR ter
15f50 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ms */.#define WH
15f60 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
15f70 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
15f80 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
15f90 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
15fa0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
15fb0 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
15fc0 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
15fd0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
15fe0 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
15ff0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
16000 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
16010 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
16020 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
16030 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a 2f 2a   distinct */../*
16040 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
16050 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
16060 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
16070 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
16080 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
16090 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
160a0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
160b0 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
160c0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
160d0 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
160e0 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
160f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16100 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
16110 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
16120 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
16130 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
16140 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
16150 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
16160 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
16170 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
16180 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
16190 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
161a0 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
161b0 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
161c0 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
161d0 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
161e0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
161f0 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
16200 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
16210 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
16220 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
16230 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
16240 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
16250 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
16260 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
16270 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
16280 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
16290 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
162a0 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
162b0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
162c0 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
162d0 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
162e0 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
162f0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
16300 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
16310 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
16320 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
16330 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
16340 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
16350 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
16360 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
16370 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
16380 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65  r-most .** conte
16390 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
163a0 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
163b0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
163c0 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
163d0 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
163e0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
163f0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
16400 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
16410 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
16420 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
16430 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
16440 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
16450 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
16460 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
16470 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
16480 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
16490 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
164a0 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
164b0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
164c0 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
164d0 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  d. .**.** Each s
164e0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
164f0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
16500 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
16510 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16520 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
16530 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
16540 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
16550 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
16560 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
16570 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
16580 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
16590 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
165a0 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
165b0 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
165c0 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
165d0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
165e0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
165f0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
16600 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
16610 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
16620 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
16630 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
16640 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
16650 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
16660 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
16670 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
16680 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
16690 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
166a0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
166b0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
166c0 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
166d0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
166e0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
166f0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
16700 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
16710 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
16720 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
16730 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
16740 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
16750 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
16760 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
16770 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
16780 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16790 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
167a0 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
167b0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
167c0 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20   u8 ncFlags;    
167d0 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
167e0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
167f0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
16800 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
16810 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
16820 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
16830 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
16840 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
16850 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20 2f  owAgg  0x01    /
16860 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
16870 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
16880 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
16890 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
168a0 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  x02    /* One or
168b0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
168c0 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
168d0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
168e0 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f  heck   0x04    /
168f0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
16900 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
16910 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
16920 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
16930 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20 20  AggFunc 0x08    
16940 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
16950 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
16960 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
16970 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
16980 49 64 78 20 20 20 30 78 31 30 20 20 20 20 2f 2a  Idx   0x10    /*
16990 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
169a0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
169b0 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a  ex WHERE */../*.
169c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
169d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
169e0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
169f0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
16a00 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
16a10 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
16a20 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
16a30 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
16a40 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
16a50 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
16a60 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
16a70 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
16a80 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
16a90 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
16aa0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
16ab0 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
16ac0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
16ad0 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
16ae0 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
16af0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
16b00 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
16b10 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
16b20 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
16b30 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
16b40 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
16b50 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
16b60 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
16b70 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
16b80 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
16b90 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
16ba0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
16bb0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
16bc0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
16bd0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
16be0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
16bf0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
16c00 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
16c10 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
16c20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
16c30 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
16c40 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
16c50 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
16c60 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
16c70 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
16c80 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
16c90 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
16ca0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
16cb0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
16cc0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
16cd0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
16ce0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
16cf0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
16d00 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
16d10 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
16d20 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
16d30 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
16d40 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
16d50 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
16d60 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
16d70 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
16d80 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
16d90 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
16da0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
16db0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
16dc0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
16dd0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
16de0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
16df0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
16e00 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
16e10 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
16e20 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
16e30 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
16e60 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
16e70 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
16e80 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
16e90 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
16ea0 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
16eb0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
16ec0 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
16ed0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
16ee0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
16ef0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
16f00 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ters */.  int ad
16f10 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
16f20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
16f30 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
16f40 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
16f50 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
16f60 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
16f70 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
16f80 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
16f90 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
16fa0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
16fb0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
16fc0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
16fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16fe0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
16ff0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
17000 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
17010 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
17020 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
17030 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
17040 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
17050 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
17060 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
17070 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
17080 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
17090 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
170a0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
170b0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
170c0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
170d0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
170e0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
170f0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
17100 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
17110 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
17120 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
17130 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
17140 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
17150 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
17160 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
17170 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
17180 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
17190 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
171a0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
171b0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
171c0 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
171d0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
171e0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
171f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
17200 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
17210 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
17220 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
17230 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
17240 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
17250 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
17260 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
17270 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
17280 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
17290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
172a0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
172b0 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
172c0 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
172d0 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
172e0 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
172f0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
17300 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
17310 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
17320 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
17330 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
17340 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
17350 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
17360 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
17370 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
17380 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
17390 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
173a0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
173b0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
173c0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
173d0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
173e0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
173f0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
17400 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
17410 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
17420 78 30 30 34 30 20 20 4e 4f 54 20 55 53 45 44 20  x0040  NOT USED 
17430 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
17440 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78  lues          0x
17450 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0080  /* Synthes
17460 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
17470 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17490 2a 20 20 20 20 20 30 78 30 31 30 30 20 20 4e 4f  *     0x0100  NO
174a0 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e  T USED */.#defin
174b0 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
174c0 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20       0x0200  /* 
174d0 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
174e0 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
174f0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
17500 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
17510 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65    0x0400  /* Nee
17520 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
17530 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
17540 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
17550 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
17560 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65    0x0800  /* The
17570 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
17580 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
17590 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
175a0 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
175b0 20 30 78 31 30 30 30 20 20 2f 2a 20 50 61 72 74   0x1000  /* Part
175c0 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
175d0 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  uery */.../*.** 
175e0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
175f0 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
17600 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
17610 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
17620 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
17630 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
17640 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
17650 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
17660 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
17670 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
17680 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
17690 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
176a0 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
176b0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
176c0 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
176d0 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
176e0 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
176f0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
17700 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
17710 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
17720 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
17730 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
17740 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
17750 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
17760 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
17770 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
17780 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
17790 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
177c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
177d0 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
177e0 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
177f0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
17800 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
17830 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
17840 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
17850 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
17860 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
17870 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
17880 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
17890 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
178a0 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
178b0 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
178c0 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
178d0 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
178e0 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
178f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17900 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
17910 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
17920 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
17930 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
17940 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
17970 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
17980 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
17990 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
179a0 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
179b0 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
179c0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
179d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
179e0 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
179f0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
17a00 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
17a10 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
17a30 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
17a40 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
17a50 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
17a60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17a70 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
17a80 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
17a90 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
17aa0 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
17ab0 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
17ac0 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
17ad0 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
17ae0 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
17af0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
17b00 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
17b10 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
17b20 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
17b30 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
17b60 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
17b70 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
17b80 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
17b90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
17ba0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
17bb0 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
17bc0 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
17bd0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
17be0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
17bf0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
17c00 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
17c10 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17c30 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
17c40 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
17c50 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
17c60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17c70 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
17c80 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
17c90 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
17ca0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
17cc0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
17cd0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
17ce0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
17d10 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
17d20 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
17d30 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
17d40 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
17d50 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
17d60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17d70 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
17d80 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
17d90 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
17da0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
17dc0 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
17dd0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
17de0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
17df0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
17e10 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
17e20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
17e30 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
17e40 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
17e50 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
17e60 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
17e70 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
17e80 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
17e90 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
17ea0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
17eb0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
17ec0 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
17ed0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
17ee0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
17ef0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
17f00 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
17f30 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
17f40 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
17f70 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
17f80 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
17f90 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
17fa0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
17fb0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17fc0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
17fd0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
17fe0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
17ff0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
18000 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
18030 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18040 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
18050 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
18060 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
18070 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
18080 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
18090 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
180a0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
180b0 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
180c0 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
180d0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
180e0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
180f0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
18100 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
18110 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
18120 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
18130 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18140 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
18150 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
18160 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
18170 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
18180 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18190 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
181a0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
181b0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
181c0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
181d0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
181e0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
181f0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18210 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
18220 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
18230 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
18240 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18250 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
18260 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
18270 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
18280 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
18290 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
182a0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
182b0 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
182c0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
182d0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
182e0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
182f0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
18300 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
18310 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
18320 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
18330 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
18340 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
18350 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
18360 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
18370 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
18380 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
18390 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
183a0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
183b0 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
183c0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
183d0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
183e0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
183f0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
18400 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
18410 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
18420 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
18430 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
18440 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
18450 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
18460 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
18470 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
18480 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
18490 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
184a0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
184b0 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
184c0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
184d0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
184e0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
184f0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
18500 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
18510 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
18520 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
18530 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
18540 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
18550 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
18560 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
18570 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
18580 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
18590 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
185a0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
185b0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
185c0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
185d0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
185e0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
185f0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
18600 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
18610 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
18620 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
18630 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
18640 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
18650 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
18660 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
18670 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
18680 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
18690 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
186a0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
186b0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
186c0 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
186d0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
186e0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
186f0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
18700 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
18710 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
18720 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
18730 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
18740 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
18750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
18760 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
18770 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
18780 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
18790 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
187a0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
187b0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
187c0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
187d0 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
187e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
187f0 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
18800 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
18810 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
18820 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
18830 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
18840 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
18850 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
18860 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
18870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18880 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
18890 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
188a0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
188b0 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
188c0 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
188d0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
188e0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
188f0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
18900 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
18910 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
18920 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
18930 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
18940 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
18950 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
18960 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
18970 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
18980 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
18990 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
189a0 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
189b0 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
189c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
189d0 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
189e0 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
189f0 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
18a00 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
18a10 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
18a20 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
18a30 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
18a40 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
18a50 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
18a60 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
18a70 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
18a80 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
18a90 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
18aa0 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
18ab0 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
18ac0 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
18ad0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
18ae0 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
18af0 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
18b00 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
18b10 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
18b20 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
18b30 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
18b40 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
18b50 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
18b60 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
18b70 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
18b80 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
18b90 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
18ba0 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
18bb0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
18bc0 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
18bd0 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
18be0 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
18bf0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
18c00 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
18c10 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
18c20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
18c30 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
18c40 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
18c50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
18c60 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
18c70 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
18c80 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
18c90 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
18ca0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
18cb0 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
18cc0 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
18cd0 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
18ce0 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
18cf0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
18d00 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
18d10 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
18d20 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
18d30 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
18d40 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
18d50 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
18d60 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
18d70 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
18d80 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
18d90 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
18da0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
18db0 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
18dc0 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
18dd0 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
18de0 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
18df0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
18e00 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
18e10 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
18e20 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
18e30 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
18e40 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
18e50 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
18e60 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
18e70 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
18e80 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
18e90 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
18ea0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
18eb0 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
18ec0 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
18ed0 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
18ee0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
18ef0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
18f00 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
18f10 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
18f20 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
18f30 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
18f40 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
18f50 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
18f60 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
18f70 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
18f80 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
18f90 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
18fa0 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
18fb0 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
18fc0 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
18fd0 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
18fe0 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
18ff0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
19000 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
19010 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
19020 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
19030 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
19040 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
19050 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
19060 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
19070 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
19080 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
19090 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
190a0 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
190b0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
190c0 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
190d0 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
190e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
190f0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
19100 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
19110 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
19120 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
19130 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
19140 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
19150 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
19160 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
19170 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
19180 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
19190 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
191a0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
191b0 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
191c0 64 65 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74  def sqlite3_uint
191d0 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73  64 yDbMask;.#els
191e0 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
191f0 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
19200 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
19210 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
19220 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
19230 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
19240 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
19250 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
19260 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
19270 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
19280 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
19290 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
192a0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
192b0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
192c0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
192d0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
192e0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
192f0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
19300 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
19310 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
19320 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
19330 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
19340 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
19350 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
19360 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
19370 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
19380 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
19390 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
193a0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
193b0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
193c0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
193d0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
193e0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
193f0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
19400 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
19410 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
19420 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
19430 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
19440 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
19450 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
19460 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
19470 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
19480 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
19490 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
194a0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
194b0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
194c0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
194d0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
194e0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
194f0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
19500 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
19510 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
19520 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
19530 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
19540 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
19550 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
19560 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
19570 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
19580 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
19590 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
195a0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
195b0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
195c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
195d0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
195e0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
195f0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
19600 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
19610 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
19620 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
19630 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
19640 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
19650 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
19660 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
19670 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
19680 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
19690 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
196a0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
196b0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
196c0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
196d0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
196e0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
196f0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
19700 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
19710 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
19720 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
19730 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
19740 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
19750 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
19760 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
19770 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
19780 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
19790 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
197a0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
197b0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
197c0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
197d0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
197e0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
197f0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
19800 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
19810 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
19820 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
19830 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
19840 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
19850 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
19860 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
19870 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
19880 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
19890 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
198a0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
198b0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
198c0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
198d0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
198e0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
198f0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
19900 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
19910 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
19920 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19930 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
19940 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
19950 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19960 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
19970 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
19980 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
19990 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
199a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
199b0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
199c0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
199d0 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
199e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
199f0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
19a00 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
19a10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19a20 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
19a30 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
19a40 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
19a50 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
19a60 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
19a70 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
19a80 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
19a90 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
19aa0 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
19ab0 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
19ac0 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
19ad0 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
19ae0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
19af0 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
19b00 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
19b10 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
19b20 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
19b30 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
19b40 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
19b50 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
19b60 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
19b70 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
19b80 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
19b90 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
19ba0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
19bb0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
19bc0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
19bd0 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
19be0 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
19bf0 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
19c00 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
19c10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19c20 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
19c30 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
19c40 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
19c50 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
19c60 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
19c70 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
19c80 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
19c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
19ca0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
19cb0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
19cc0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
19cd0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
19ce0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
19cf0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
19d00 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
19d10 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
19d20 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
19d30 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
19d40 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
19d50 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
19d60 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
19d70 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
19d80 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
19d90 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
19da0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
19db0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
19dd0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
19de0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
19df0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
19e00 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
19e10 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
19e20 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
19e30 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
19e40 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
19e50 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
19e60 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
19e70 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
19e80 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
19e90 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
19ea0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
19eb0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
19ec0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
19ed0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
19ee0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
19ef0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
19f00 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
19f10 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
19f20 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
19f30 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
19f40 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
19f50 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
19f60 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
19f70 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
19f80 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
19f90 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
19fa0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
19fb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
19fc0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
19fd0 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
19fe0 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
19ff0 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1a000 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1a010 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1a020 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1a030 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1a040 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1a050 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1a060 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1a070 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1a080 67 72 61 6d 20 2a 2f 0a 23 69 66 6e 64 65 66 20  gram */.#ifndef 
1a090 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1a0a0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1a0b0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1a0c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1a0d0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1a0e0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1a0f0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1a100 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1a110 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1a120 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1a130 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1a140 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1a150 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1a160 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1a170 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
1a180 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
1a190 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
1a1a0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1a1b0 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
1a1c0 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1a1d0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1a1e0 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1a1f0 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1a200 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1a210 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1a220 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1a230 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1a240 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1a250 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1a260 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
1a270 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1a280 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e  TE TABLE */.  in
1a290 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20  t addrSkipPK;   
1a2a0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1a2b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
1a2c0 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59  skip PRIMARY KEY
1a2d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20   index */.  u32 
1a2e0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1a2f0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1a300 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1a310 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1a320 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1a330 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1a340 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1a350 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1a360 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1a370 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1a380 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1a390 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1a3a0 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1a3b0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1a3c0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1a3d0 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1a3e0 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1a3f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1a400 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1a410 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1a420 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1a430 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1a440 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1a450 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1a460 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1a470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1a4b0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1a4c0 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1a4d0 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1a4e0 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1a4f0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1a500 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1a510 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1a520 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1a530 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1a540 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1a550 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1a560 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1a570 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1a580 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1a590 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1a5a0 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1a5b0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1a5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a5d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a5e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1a5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1a600 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1a610 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a620 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1a630 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1a640 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1a650 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1a660 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a670 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1a680 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1a690 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1a6a0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1a6b0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1a6c0 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1a6d0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62  RY KEY */.  u8 b
1a6e0 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20 20  FreeWith;       
1a6f0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1a700 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62 65   pWith should be
1a710 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72 73   freed with pars
1a720 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  er */.  u8 expla
1a730 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1a740 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a750 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1a760 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1a770 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1a780 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1a790 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1a7a0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1a7b0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1a7c0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1a7d0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1a7e0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a800 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1a810 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1a820 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1a830 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1a840 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a850 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1a860 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1a870 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a890 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1a8a0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1a8b0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1a8c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a8d0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1a8e0 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1a8f0 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1a900 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1a910 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1a920 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1a930 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1a940 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1a950 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1a960 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1a970 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1a980 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1a990 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1a9a0 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1a9b0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1a9c0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1a9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1a9e0 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1a9f0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1aa00 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1aa10 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1aa20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1aa30 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1aa40 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1aa50 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1aa60 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1aa70 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1aa80 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1aa90 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1aaa0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1aab0 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1aac0 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1aad0 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1aae0 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1aaf0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1ab00 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1ab10 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1ab20 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1ab30 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1ab40 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1ab50 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1ab60 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1ab70 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1ab80 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1ab90 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1aba0 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1abb0 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1abc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1abd0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1abe0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1ac00 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1ac10 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1ac20 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1ac30 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1ac40 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1ac50 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1ac60 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1ac70 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1ac80 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1ac90 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1aca0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1acb0 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1acc0 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1acd0 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1ace0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1acf0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1ad00 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1ad10 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1ad20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1ad30 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1ad40 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  NULL */.};../*.*
1ad50 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1ad60 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1ad70 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1ad80 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1ad90 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1ada0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1adb0 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1adc0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1add0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1ade0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1adf0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1ae00 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1ae10 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1ae20 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1ae30 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1ae40 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1ae50 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1ae60 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1ae70 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1ae80 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1ae90 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1aea0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1aeb0 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1aec0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1aed0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1aee0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1aef0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1af00 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1af10 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1af20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1af30 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1af40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1af50 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1af60 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1af70 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1af80 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1af90 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1afa0 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1afb0 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1afc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1afd0 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1afe0 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1aff0 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1b000 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1b010 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1b020 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1b030 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1b040 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1b050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1b060 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1b070 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1b080 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1b090 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1b0a0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1b0b0 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1b0c0 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1b0d0 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1b0e0 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1b0f0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45  efine OPFLAG_CLE
1b100 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20  ARCACHE    0x20 
1b110 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75     /* Clear pseu
1b120 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69  do-table cache i
1b130 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23  n OP_Column */.#
1b140 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1b150 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1b160 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1b170 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1b180 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1b190 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1b1a0 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1b1b0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1b1c0 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1b1d0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1b1e0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1b1f0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1b200 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1b210 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1b220 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1b230 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1b240 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20    0x02    /* P2 
1b250 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1b260 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1b270 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1b280 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1b290 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1b2a0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1b2b0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1b2c0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1b2d0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1b2e0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1b2f0 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1b300 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1b310 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1b320 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1b330 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1b340 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1b350 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1b360 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1b370 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1b380 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1b390 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1b3a0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1b3b0 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1b3c0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1b3d0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1b3e0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1b3f0 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1b400 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1b410 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1b420 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1b430 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1b440 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1b450 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1b460 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1b470 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1b480 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1b490 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1b4a0 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1b4b0 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1b4c0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1b4d0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1b4e0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1b4f0 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1b500 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1b510 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1b520 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1b530 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1b540 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1b550 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1b560 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1b570 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1b580 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1b590 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1b5a0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1b5b0 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1b5c0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1b5f0 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1b600 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1b610 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1b620 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1b630 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b650 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1b660 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1b670 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1b680 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1b690 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b6a0 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1b6b0 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1b6c0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1b6d0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1b6e0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1b6f0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1b700 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1b710 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1b720 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1b730 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1b740 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1b750 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1b760 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1b790 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1b7a0 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1b7b0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1b7c0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1b7d0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1b7e0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1b7f0 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1b800 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1b810 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1b820 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1b830 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1b840 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1b850 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1b860 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1b870 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1b880 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1b890 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1b8a0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1b8b0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1b8c0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1b8d0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1b8e0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1b8f0 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1b900 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1b910 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1b920 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1b930 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1b940 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1b950 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1b960 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1b970 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1b980 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1b990 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1b9a0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1b9b0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1b9c0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1b9d0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1b9e0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1b9f0 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1ba00 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1ba10 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1ba20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1ba30 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1ba40 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1ba50 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1ba60 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1ba70 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1ba80 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1ba90 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1baa0 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1bab0 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1bac0 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1bad0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1bae0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1baf0 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1bb00 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1bb10 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1bb20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1bb30 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1bb40 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1bb50 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1bb60 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1bb70 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1bb80 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1bb90 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1bba0 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1bbb0 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1bbc0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1bbd0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1bbe0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1bbf0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1bc00 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1bc10 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1bc20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1bc30 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1bc40 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1bc50 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1bc60 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1bc70 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1bc80 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1bc90 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1bca0 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1bcb0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1bcc0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1bcd0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1bce0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1bcf0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1bd00 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1bd10 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  .. * target    -
1bd20 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1bd30 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1bd40 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1bd50 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
1bd60 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
1bd70 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1bd80 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
1bd90 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
1bda0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1bdb0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1bdc0 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
1bdd0 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
1bde0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
1bdf0 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
1be00 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1be10 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
1be20 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
1be30 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
1be40 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
1be50 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
1be60 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
1be70 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
1be80 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
1be90 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
1bea0 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
1beb0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1bec0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1bed0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1bee0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1bef0 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
1bf00 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1bf10 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1bf20 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
1bf30 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1bf40 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1bf50 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1bf60 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
1bf70 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
1bf80 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
1bf90 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1bfa0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1bfb0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1bfc0 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
1bfd0 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
1bfe0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1bff0 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
1c000 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1c010 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1c020 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1c030 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1c040 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1c050 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
1c060 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
1c070 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
1c080 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
1c090 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1c0a0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
1c0b0 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
1c0c0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
1c0d0 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
1c0e0 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
1c0f0 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
1c100 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
1c110 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1c120 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1c130 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
1c140 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1c150 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
1c160 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
1c170 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
1c180 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
1c190 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
1c1a0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
1c1b0 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
1c1c0 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
1c1d0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
1c1e0 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1c1f0 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52  CT statment or R
1c200 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1c210 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20  O .. SELECT ... 
1c220 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
1c230 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72  t;        /* Tar
1c240 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1c250 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1c260 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1c270 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1c280 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1c290 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1c2a0 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1c2b0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1c2c0 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1c2d0 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1c2e0 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1c2f0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1c300 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1c310 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1c320 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1c330 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1c340 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1c350 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1c360 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1c370 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1c380 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1c390 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1c3a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c3b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1c3c0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1c3d0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1c3e0 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1c3f0 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1c400 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1c410 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1c420 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1c430 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1c440 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1c450 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1c460 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1c470 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1c480 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1c490 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1c4a0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1c4b0 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1c4c0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1c4d0 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1c4e0 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1c4f0 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1c500 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1c510 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1c520 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1c530 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1c540 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1c550 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1c560 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1c570 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1c580 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1c590 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1c5a0 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1c5b0 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1c5c0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1c5d0 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1c5e0 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1c5f0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1c600 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1c610 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1c620 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1c630 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1c640 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1c650 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1c660 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1c670 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1c680 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1c690 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1c6a0 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1c6b0 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1c6c0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1c6d0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1c6e0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1c6f0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1c700 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1c710 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1c720 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1c730 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1c740 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1c750 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1c760 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1c770 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1c780 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1c790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1c7a0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1c7b0 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1c7c0 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1c7d0 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1c7e0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1c7f0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1c800 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1c810 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1c820 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
1c830 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73  gth */.  u8   us
1c840 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a  eMalloc;      /*
1c850 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71   0: none,  1: sq
1c860 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20  lite3DbMalloc,  
1c870 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  2: sqlite3_mallo
1c880 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  c */.  u8   accE
1c890 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
1c8a0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
1c8b0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1c8c0 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
1c8d0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
1c8e0 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
1c8f0 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a  UM_TOOBIG  2../*
1c900 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1c910 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1c920 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1c930 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1c940 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1c950 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1c960 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1c970 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1c980 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1c990 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1c9a0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1c9b0 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1c9c0 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1c9d0 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
1c9e0 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
1c9f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
1ca00 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
1ca10 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1ca20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
1ca30 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
1ca40 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
1ca50 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
1ca60 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1ca70 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
1ca80 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1ca90 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
1caa0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
1cab0 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
1cac0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
1cad0 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
1cae0 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
1caf0 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
1cb00 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
1cb10 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
1cb20 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
1cb30 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
1cb40 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1cb70 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
1cb80 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
1cb90 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
1cba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1cbb0 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
1cbc0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1cbd0 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1cc00 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
1cc10 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
1cc20 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
1cc30 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1cc40 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
1cc50 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
1cc60 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
1cc90 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
1cca0 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
1ccb0 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccd0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
1cce0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1ccf0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
1cd00 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
1cd10 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1cd20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
1cd30 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
1cd40 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cd60 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1cd70 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1cd80 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1cd90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1cda0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1cdb0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1cdc0 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1cdd0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1cde0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1cdf0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1ce00 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1ce10 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1ce20 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1ce30 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1ce40 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1ce50 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1ce60 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1ce70 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
1ce80 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1ce90 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1cea0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1ceb0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1cec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1ced0 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1cee0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1cf10 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1cf20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1cf30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cf40 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1cf50 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1cf60 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
1cf70 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1cf90 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
1cfa0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
1cfb0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1cfc0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1cfd0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
1cfe0 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
1cff0 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
1d000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d010 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
1d020 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1d030 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d050 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
1d060 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
1d070 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d0a0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
1d0b0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
1d0c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d0d0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
1d0e0 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
1d0f0 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1d120 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
1d130 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
1d140 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1d150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d160 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1d170 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1d180 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d1a0 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
1d1b0 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
1d1c0 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
1d1d0 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
1d1e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
1d1f0 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
1d200 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
1d210 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
1d220 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
1d230 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
1d240 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
1d250 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
1d260 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
1d270 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
1d280 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
1d290 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1d2a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1d2b0 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
1d2c0 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
1d2d0 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
1d2e0 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
1d2f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d300 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
1d310 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
1d320 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
1d330 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
1d340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d350 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
1d360 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
1d370 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
1d380 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
1d390 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1d3a0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1d3b0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1d3c0 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
1d3d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1d3e0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1d3f0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1d400 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69  alized */.  sqli
1d410 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
1d420 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
1d430 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
1d440 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1d450 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  e() */.  int nRe
1d460 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1d470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d480 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1d490 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1d4a0 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
1d4b0 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
1d4c0 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
1d4d0 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
1d4e0 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
1d4f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d500 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1d510 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
1d520 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f  g() */.  int bLo
1d530 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1d540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1d550 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1d560 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1d570 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1d580 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1d590 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1d5a0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1d5b0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1d5c0 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1d5d0 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
1d5e0 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
1d5f0 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
1d600 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
1d610 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
1d620 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
1d630 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
1d640 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
1d650 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
1d660 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
1d670 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1d680 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
1d690 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
1d6a0 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
1d6b0 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
1d6c0 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
1d6d0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
1d6e0 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
1d720 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  nt */.#endif.};.
1d730 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
1d740 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
1d750 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
1d760 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
1d770 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
1d780 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
1d790 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
1d7a0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
1d7b0 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
1d7c0 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1d7d0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
1d7e0 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
1d7f0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
1d800 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
1d810 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
1d820 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
1d830 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
1d840 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
1d850 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
1d860 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
1d870 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
1d880 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
1d890 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
1d8a0 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
1d8b0 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
1d8c0 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
1d8d0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
1d8e0 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
1d8f0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1d900 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
1d910 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
1d920 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
1d930 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
1d940 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
1d950 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
1d960 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
1d970 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
1d980 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
1d990 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
1d9a0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1d9b0 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1d9c0 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1d9d0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1d9e0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1d9f0 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1da00 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1da10 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1da20 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1da30 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1da40 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1da50 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1da60 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1da70 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1da80 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
1da90 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
1daa0 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
1dab0 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
1dac0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
1dad0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
1db00 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
1db10 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
1db20 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1db30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1db40 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
1db50 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ies */.  union {
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
1db90 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
1dba0 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
1dbb0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
1dbe0 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20  t */.    int i; 
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
1dc20 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c  alue */.    SrcL
1dc30 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc50 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
1dc60 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
1dc70 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
1dc80 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
1dc90 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
1dca0 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
1dcb0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ences */.  } u;.
1dcc0 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
1dcd0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
1dce0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1dcf0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
1dd00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1dd10 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
1dd20 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
1dd30 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1dd40 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
1dd50 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1dd60 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
1dd70 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
1dd80 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1dd90 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
1dda0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1ddb0 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
1ddc0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
1ddd0 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
1dde0 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
1ddf0 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
1de00 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
1de10 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
1de20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
1de30 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
1de40 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
1de50 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
1de60 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
1de70 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
1de80 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
1de90 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
1dea0 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
1deb0 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
1dec0 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
1ded0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1dee0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1def0 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
1df00 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
1df10 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
1df20 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
1df30 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
1df40 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
1df50 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
1df60 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
1df70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1df80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1df90 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
1dfa0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
1dfb0 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
1dfe0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1dff0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
1e000 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
1e010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
1e020 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
1e030 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
1e040 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
1e050 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
1e060 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
1e070 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
1e080 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
1e090 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
1e0a0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
1e0b0 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
1e0c0 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
1e0d0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1e0e0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
1e0f0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
1e100 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
1e110 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
1e120 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20 20 20  char *zErr;     
1e130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
1e140 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
1e150 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
1e160 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
1e170 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  };../*.** Assumi
1e180 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
1e190 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1e1a0 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
1e1b0 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
1e1c0 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
1e1d0 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1e1e0 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
1e1f0 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
1e200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
1e210 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
1e240 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
1e250 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
1e280 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
1e290 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
1e2a0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
1e2f0 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
1e300 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
1e310 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
1e320 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
1e330 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
1e340 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
1e350 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
1e360 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
1e370 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
1e380 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
1e390 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
1e3a0 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
1e3b0 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
1e3c0 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
1e3d0 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
1e3e0 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
1e3f0 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
1e400 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
1e410 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
1e420 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
1e430 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
1e440 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
1e450 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
1e460 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
1e470 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
1e480 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
1e490 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
1e4a0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
1e4b0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1e4c0 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
1e4d0 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
1e4e0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1e4f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
1e500 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
1e510 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
1e520 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a  (__LINE__).../*.
1e530 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
1e540 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
1e550 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
1e560 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
1e570 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
1e580 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
1e590 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
1e5a0 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61  fusion we also a
1e5b0 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
1e5c0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
1e5d0 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
1e5e0 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c  n alisse for SQL
1e5f0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
1e600 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
1e610 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1e620 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
1e630 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1e640 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
1e650 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
1e660 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1e670 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
1e680 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
1e690 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
1e6a0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
1e6b0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
1e6c0 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
1e6d0 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
1e6e0 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
1e6f0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1e700 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
1e710 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
1e720 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
1e730 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
1e740 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
1e750 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
1e760 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1e770 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1e780 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
1e790 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
1e7a0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
1e7b0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
1e7c0 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
1e7d0 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
1e7e0 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
1e7f0 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
1e800 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
1e810 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
1e820 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
1e830 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
1e840 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
1e850 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
1e860 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
1e870 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
1e880 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1e890 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1e8a0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
1e8b0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1e8c0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
1e8d0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1e8e0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
1e8f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1e900 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
1e910 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1e920 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1e930 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
1e940 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1e950 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
1e960 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1e970 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
1e980 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1e990 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
1e9a0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1e9b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1e9c0 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
1e9d0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
1e9e0 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
1e9f0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1ea00 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
1ea10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ea20 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
1ea30 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
1ea40 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
1ea50 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
1ea60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1ea70 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
1ea80 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
1ea90 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1eaa0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
1eab0 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
1eac0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1ead0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1eae0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
1eaf0 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
1eb00 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1eb10 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1eb20 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
1eb30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1eb40 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1eb50 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
1eb60 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
1eb70 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1eb80 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1eb90 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
1eba0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
1ebb0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1ebc0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1ebd0 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
1ebe0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1ebf0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
1ec00 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
1ec10 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65  rototypes.*/.#de
1ec20 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49  fine sqlite3StrI
1ec30 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69  Cmp sqlite3_stri
1ec40 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  cmp.int sqlite3S
1ec50 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
1ec60 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
1ec70 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
1ec80 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
1ec90 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
1eca0 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
1ecb0 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
1ecc0 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
1ecd0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e  sqlite3Malloc(in
1ece0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1ecf0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29  3MallocZero(int)
1ed00 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1ed10 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
1ed20 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  te3*, int);.void
1ed30 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
1ed40 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69  cRaw(sqlite3*, i
1ed50 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
1ed60 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
1ed70 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
1ed80 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
1ed90 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
1eda0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1edb0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1edc0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
1edd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1ede0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
1edf0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
1ee00 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1ee10 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1ee20 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
1ee30 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1ee40 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
1ee50 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1ee60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
1ee70 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
1ee80 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
1ee90 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
1eea0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
1eeb0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
1eec0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1eed0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
1eee0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1eef0 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
1ef00 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
1ef10 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
1ef20 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
1ef30 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
1ef40 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1ef50 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
1ef60 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
1ef70 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
1ef80 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id));.int sqlite
1ef90 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
1efa0 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
1efb0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
1efc0 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
1efd0 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
1efe0 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
1eff0 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
1f000 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
1f010 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
1f020 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
1f030 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
1f040 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
1f050 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
1f060 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
1f070 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
1f080 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
1f090 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
1f0a0 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
1f0b0 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
1f0c0 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
1f0d0 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
1f0e0 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
1f0f0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
1f100 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
1f110 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
1f120 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
1f130 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
1f140 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
1f150 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
1f160 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
1f170 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f180 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1f190 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64        .#else.# d
1f1a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1f1b0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1f1c0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1f1d0 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
1f1e0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1f1f0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
1f200 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1f210 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
1f220 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1f230 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
1f240 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
1f250 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1f260 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1f270 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
1f280 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1f290 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1f2a0 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
1f2b0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1f2c0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
1f2d0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
1f2e0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
1f2f0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
1f300 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
1f310 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
1f320 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
1f330 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1f340 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1f350 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
1f360 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1f370 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
1f380 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
1f390 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
1f3a0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
1f3b0 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
1f3c0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
1f3d0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
1f3e0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
1f3f0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
1f400 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
1f410 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
1f420 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f430 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69  StatusAdd(int, i
1f440 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f450 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20  3StatusSet(int, 
1f460 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  int);..#ifndef S
1f470 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
1f480 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
1f490 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
1f4a0 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
1f4b0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
1f4c0 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
1f4d0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1f4e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1f4f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
1f500 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
1f510 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
1f520 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
1f530 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
1f540 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
1f550 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
1f560 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
1f570 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
1f580 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
1f590 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
1f5a0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
1f5b0 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
1f5c0 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
1f5d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f5e0 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
1f5f0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
1f600 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
1f610 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
1f620 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
1f630 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
1f640 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
1f650 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
1f660 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
1f670 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
1f680 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
1f690 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
1f6a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
1f6b0 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
1f6c0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
1f6d0 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
1f6e0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
1f6f0 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
1f700 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1f710 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
1f720 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
1f730 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1f740 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1f750 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
1f760 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
1f770 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
1f780 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
1f790 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1f7a0 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
1f7b0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
1f7c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
1f7d0 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
1f7e0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1f7f0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f800 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
1f810 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
1f820 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
1f830 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ar*);.#endif../*
1f840 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69   Output formatti
1f850 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ng for SQLITE_TE
1f860 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a  STCTRL_EXPLAIN *
1f870 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1f880 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45  LITE_ENABLE_TREE
1f890 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64  _EXPLAIN).  void
1f8a0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1f8b0 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76  egin(Vdbe*);.  v
1f8c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1f8d0 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20  inPrintf(Vdbe*, 
1f8e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1f8f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f900 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a  3ExplainNL(Vdbe*
1f910 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f920 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62  3ExplainPush(Vdb
1f930 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1f940 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64  te3ExplainPop(Vd
1f950 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1f960 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
1f970 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1f980 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1f990 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c  elect(Vdbe*, Sel
1f9a0 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
1f9b0 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1f9c0 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Vdbe*, Expr*);.
1f9d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1f9e0 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64  plainExprList(Vd
1f9f0 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  be*, ExprList*);
1fa00 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  .  const char *s
1fa10 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1fa20 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65  ation(Vdbe*);.#e
1fa30 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1fa40 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e  ite3ExplainBegin
1fa50 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1fa60 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63  ite3ExplainSelec
1fa70 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
1fa80 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1fa90 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  pr(A,B).# define
1faa0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1fab0 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64  xprList(A,B).# d
1fac0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1fad0 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20  lainFinish(X).# 
1fae0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
1faf0 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29  beExplanation(X)
1fb00 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64   0.#endif...void
1fb10 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1fb20 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
1fb30 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
1fb40 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
1fb50 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
1fb60 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1fb70 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
1fb80 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
1fb90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
1fba0 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
1fbb0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
1fbc0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1fbd0 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
1fbe0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1fbf0 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
1fc00 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
1fc10 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
1fc20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
1fc30 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
1fc40 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1fc50 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
1fc60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1fc70 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
1fc80 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1fc90 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1fca0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
1fcb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1fcc0 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
1fcd0 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70  che(Parse*);.Exp
1fce0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
1fcf0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
1fd00 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
1fd10 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
1fd20 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
1fd30 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1fd40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1fd50 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
1fd60 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
1fd70 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
1fd80 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
1fd90 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
1fda0 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  r*, Expr*, const
1fdb0 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
1fdc0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
1fdd0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
1fde0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
1fdf0 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
1fe00 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1fe10 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1fe20 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
1fe30 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
1fe40 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
1fe50 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
1fe60 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
1fe70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
1fe80 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
1fe90 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
1fea0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
1feb0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1fec0 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
1fed0 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
1fee0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1fef0 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
1ff00 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
1ff10 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
1ff20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ff30 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
1ff40 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
1ff50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
1ff60 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
1ff70 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
1ff80 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
1ff90 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
1ffa0 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
1ffb0 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
1ffc0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1ffd0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
1ffe0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
1fff0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
20000 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
20010 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
20020 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
20030 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
20040 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
20050 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
20060 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
20070 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
20080 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
20090 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
200a0 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
200b0 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20  qlite3*);.Table 
200c0 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
200d0 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
200e0 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
200f0 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
20100 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
20110 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
20120 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
20130 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
20140 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
20150 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
20160 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
20170 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
20180 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
20190 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
201a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
201b0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
201c0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
201d0 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
201e0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
201f0 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
20200 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
20210 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
20220 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20230 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
20240 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
20250 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
20260 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79  lite3AddColumnTy
20270 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  pe(Parse*,Token*
20280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20290 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
202a0 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
202b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
202c0 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
202d0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
202e0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
202f0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
20300 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
20310 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20320 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
20330 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
20340 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
20370 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
20380 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
20390 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
203a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
203b0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
203c0 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
203d0 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  *);..Bitvec *sql
203e0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
203f0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
20400 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
20410 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
20420 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
20430 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
20440 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
20450 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
20460 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
20470 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
20480 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
20490 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
204a0 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
204b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
204c0 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
204d0 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65  nt,int*);..RowSe
204e0 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
204f0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
20500 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
20510 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20520 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
20530 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
20540 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
20550 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
20560 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
20570 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38  Test(RowSet*, u8
20580 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69   iBatch, i64);.i
20590 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
205a0 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  Next(RowSet*, i6
205b0 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  4*);..void sqlit
205c0 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72  e3CreateView(Par
205d0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
205e0 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a  *,Token*,Select*
205f0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
20600 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20610 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
20620 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
20630 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
20640 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
20650 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
20660 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
20670 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20680 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
20690 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
206a0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
206b0 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
206c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
206d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
206e0 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
206f0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
20700 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
20710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
20720 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
20730 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
20740 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20750 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
20760 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
20770 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
20780 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
20790 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
207a0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
207b0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
207c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
207d0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
207e0 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
207f0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
20800 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
20810 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
20820 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
20830 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
20840 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
20850 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
20860 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
20870 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
20880 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
20890 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
208a0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
208b0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
208c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
208d0 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
208e0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
208f0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
20900 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
20910 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
20920 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
20930 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
20940 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
20950 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
20960 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
20970 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
20980 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
20990 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
209a0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
209b0 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
209f0 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
20a00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
20a10 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
20a20 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
20a30 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
20a40 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
20a50 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
20a60 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
20a70 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
20a80 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
20a90 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
20aa0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
20ab0 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
20ac0 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
20ad0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
20ae0 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
20af0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
20b00 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
20b10 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
20b20 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
20b30 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
20b40 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
20b50 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
20b60 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
20b70 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
20b80 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
20b90 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
20ba0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
20bb0 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
20be0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20bf0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
20c00 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
20c10 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20c20 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
20c30 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
20c40 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
20c50 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
20c60 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
20c70 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
20c80 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
20cb0 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a  rList*,u16,Expr*
20cc0 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
20cd0 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
20ce0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
20cf0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
20d00 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
20d10 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
20d20 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20d30 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
20d40 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
20d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
20d60 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
20d70 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
20d80 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
20d90 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20da0 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
20db0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
20dc0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
20dd0 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
20de0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
20df0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
20e00 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
20e10 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
20e20 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
20e30 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
20e40 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
20e50 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
20e60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20e70 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
20e80 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
20e90 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
20ea0 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
20eb0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
20ec0 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
20ed0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
20ee0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
20ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
20f00 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
20f10 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33  o*);.u64 sqlite3
20f20 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
20f30 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
20f40 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
20f50 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
20f60 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
20f70 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
20f80 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
20f90 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
20fa0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
20fb0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
20fc0 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
20fd0 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
20fe0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
20ff0 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
21000 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
21010 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
21020 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
21030 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
21040 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
21050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21060 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
21070 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
21080 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
21090 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
210a0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
210b0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
210c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
210d0 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
210e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
210f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21100 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
21110 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
21120 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
21130 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74  ePop(Parse*, int
21140 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21150 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
21160 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
21170 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21180 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
21190 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
211a0 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
211b0 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
211c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
211d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
211e0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
211f0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21200 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f  te3ExprCodeFacto
21210 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78  rable(Parse*, Ex
21220 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
21230 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
21240 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
21250 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  pr*, int, u8);.i
21260 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
21270 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
21280 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
21290 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
212a0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
212b0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
212c0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
212d0 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
212e0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
212f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
21300 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
21310 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
21320 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53  , u8);.#define S
21330 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20  QLITE_ECEL_DUP  
21340 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65      0x01  /* Dee
21350 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63  p, not shallow c
21360 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  opies */.#define
21370 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43   SQLITE_ECEL_FAC
21380 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46  TOR   0x02  /* F
21390 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
213a0 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64  nt terms */.void
213b0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
213c0 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
213d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
213e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
213f0 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
21400 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
21410 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
21420 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
21430 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
21440 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
21450 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
21460 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
21470 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
21480 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
21490 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
214a0 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
214b0 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
214c0 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  w,struct SrcList
214d0 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
214e0 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
214f0 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
21500 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
21510 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
21520 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
21530 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
21540 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
21550 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
21560 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
21570 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
21580 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
21590 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
215a0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
215b0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
215c0 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
215d0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
215e0 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
215f0 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
21600 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
21610 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
21620 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
21630 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
21640 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
21650 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
21660 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
21670 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
21680 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
21690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
216a0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
216b0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
216c0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
216d0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
216e0 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
216f0 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
21700 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
21710 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
21720 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
21730 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
21740 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
21750 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
21760 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
21770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
21780 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
21790 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
217a0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
217b0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
217c0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
217d0 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
217e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
217f0 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
21800 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
21810 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
21820 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
21830 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
21840 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
21850 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
21860 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
21870 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21880 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
21890 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
218a0 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
218b0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
218c0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
218d0 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
218e0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
218f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
21900 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
21910 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
21920 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
21930 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
21940 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
21950 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
21960 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
21970 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
21980 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
21990 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
219a0 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
219b0 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
219c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
219d0 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
219e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
219f0 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
21a00 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
21a10 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
21a20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
21a30 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
21a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
21a50 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
21a60 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
21a70 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
21a80 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b  t,i16,u8,u8,u8);
21a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
21aa0 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
21ab0 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
21ac0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
21ad0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21ae0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
21af0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
21b00 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
21b10 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
21b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
21b30 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
21b40 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
21b50 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
21b60 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b90 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b  u8,u8,int,int*);
21ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
21bb0 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
21bc0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
21bd0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
21be0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
21bf0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
21c00 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
21c10 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
21c20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
21c30 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
21c40 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
21c50 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
21c60 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21c70 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
21c80 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
21c90 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
21ca0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
21cb0 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
21cc0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
21cd0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
21ce0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
21cf0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
21d00 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
21d10 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
21d20 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
21d30 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
21d40 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
21d50 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
21d60 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
21d70 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
21d80 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
21d90 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
21da0 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
21db0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
21dc0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
21dd0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
21de0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
21df0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
21e00 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
21e10 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
21e20 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
21e30 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
21e40 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
21e50 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
21e60 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
21e70 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
21e80 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
21e90 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
21ea0 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  t,int,u8,u8);.vo
21eb0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
21ec0 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
21ed0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ns(sqlite3*);.vo
21ee0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
21ef0 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
21f00 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
21f10 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47  sqlite3RegisterG
21f20 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76  lobalFunctions(v
21f30 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
21f40 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
21f50 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
21f60 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
21f70 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
21f80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21f90 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
21fa0 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
21fb0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
21fc0 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
21fd0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21fe0 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
21ff0 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
22000 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
22010 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
22020 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
22030 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22040 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
22050 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
22060 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
22070 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
22080 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
22090 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
220b0 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
220c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
220d0 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
220e0 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
220f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
22100 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
22110 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
22120 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
22130 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
22140 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
22150 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
22160 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
22170 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
22180 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
22190 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
221a0 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
221b0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
221c0 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
221d0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
221e0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
221f0 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
22200 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
22210 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
22220 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22240 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
22250 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
22260 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
22270 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
22280 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
22290 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
222a0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
222b0 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
222c0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
222d0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
222e0 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
222f0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
22300 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
22310 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
22320 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22330 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
22340 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
22350 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
22360 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
22370 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
22380 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
22390 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223c0 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
223d0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
223e0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
223f0 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
22400 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
22410 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
22420 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
22430 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
22440 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
22450 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
22460 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22470 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
22480 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
22490 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
224a0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
224b0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
224c0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
224d0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
224e0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
224f0 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
22500 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
22510 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
22520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
22530 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
22540 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
22550 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
22560 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
22570 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
22580 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
22590 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
225a0 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
225b0 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
225c0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
225d0 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
225e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
225f0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
22600 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
22610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
22620 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
22630 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
22640 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22650 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
22660 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
22670 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22680 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
22690 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
226a0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
226b0 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
226c0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
226d0 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
226e0 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
226f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
22700 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
22710 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
22720 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22730 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
22740 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
22750 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
22760 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
22770 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
22780 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
22790 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
227a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
227b0 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
227c0 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
227d0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
227e0 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
227f0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
22800 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
22810 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
22820 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
22830 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
22840 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
22850 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
22860 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
22870 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
22880 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
22890 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
228a0 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
228b0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
228c0 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
228d0 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
228e0 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
228f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22900 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
22910 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
22920 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
22930 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
22940 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
22950 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
22960 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
22970 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
22980 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
22990 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
229a0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
229b0 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
229c0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
229d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
229e0 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
229f0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
22a00 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
22a10 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
22a20 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
22a30 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
22a40 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
22a50 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
22a60 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
22a70 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
22a80 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
22a90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
22aa0 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
22ab0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
22ac0 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
22ad0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
22ae0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
22af0 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
22b00 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
22b10 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
22b20 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
22b30 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
22b40 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
22b50 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
22b60 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
22b70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
22b80 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
22b90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
22ba0 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
22bb0 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
22bc0 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
22bd0 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
22be0 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
22bf0 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
22c00 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
22c10 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
22c20 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
22c30 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
22c40 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
22c50 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
22c60 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
22c70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
22c80 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
22c90 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
22ca0 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
22cb0 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  if.u64 sqlite3Lo
22cc0 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
22cd0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
22ce0 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
22cf0 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
22d00 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
22d10 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
22d20 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
22d30 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
22d40 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
22d50 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
22d60 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20  til.c.** file.  
22d70 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20  Code should use 
22d80 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20  the MACRO forms 
22d90 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56 61  below, as the Va
22da0 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73 0a  rint32 versions.
22db0 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f 20  ** are coded to 
22dc0 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67 6c  assume the singl
22dd0 65 20 62 79 74 65 20 63 61 73 65 20 69 73 20 61  e byte case is a
22de0 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20 28  lready handled (
22df0 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41  which .** the MA
22e00 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a  CRO form does)..
22e10 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
22e20 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
22e30 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e   char*, u64);.in
22e40 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
22e50 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68  nt32(unsigned ch
22e60 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73 71  ar*, u32);.u8 sq
22e70 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
22e80 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
22e90 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
22ea0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
22eb0 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
22ec0 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
22ed0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
22ee0 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
22ef0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64 65  ./*.** The heade
22f00 72 20 6f 66 20 61 20 72 65 63 6f 72 64 20 63 6f  r of a record co
22f10 6e 73 69 73 74 73 20 6f 66 20 61 20 73 65 71 75  nsists of a sequ
22f20 65 6e 63 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  ence variable-le
22f30 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a  ngth integers..*
22f40 2a 20 54 68 65 73 65 20 69 6e 74 65 67 65 72 73  * These integers
22f50 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61   are almost alwa
22f60 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65  ys small and are
22f70 20 65 6e 63 6f 64 65 64 20 61 73 20 61 20 73 69   encoded as a si
22f80 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68  ngle byte..** Th
22f90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
22fa0 6f 73 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67  os take advantag
22fb0 65 20 74 68 69 73 20 66 61 63 74 20 74 6f 20 70  e this fact to p
22fc0 72 6f 76 69 64 65 20 61 20 66 61 73 74 20 65 6e  rovide a fast en
22fd0 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f  code.** and deco
22fe0 64 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  de of the intege
22ff0 72 73 20 69 6e 20 61 20 72 65 63 6f 72 64 20 68  rs in a record h
23000 65 61 64 65 72 2e 20 20 49 74 20 69 73 20 66 61  eader.  It is fa
23010 73 74 65 72 20 66 6f 72 20 74 68 65 20 63 6f 6d  ster for the com
23020 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65 72  mon.** case wher
23030 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73  e the integer is
23040 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
23050 20 49 74 20 69 73 20 61 20 6c 69 74 74 6c 65 20   It is a little 
23060 73 6c 6f 77 65 72 20 77 68 65 6e 20 74 68 65 0a  slower when the.
23070 2a 2a 20 69 6e 74 65 67 65 72 20 69 73 20 74 77  ** integer is tw
23080 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 2e  o or more bytes.
23090 20 20 42 75 74 20 6f 76 65 72 61 6c 6c 20 69 74    But overall it
230a0 20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a   is faster..**.*
230b0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
230c0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
230d0 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a  equivalent:.**.*
230e0 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65  *     x = sqlite
230f0 33 47 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c  3GetVarint32( A,
23100 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20   &B );.**     x 
23110 3d 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  = sqlite3PutVari
23120 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
23130 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67 65 74 56  .**     x = getV
23140 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
23150 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70 75 74 56  .**     x = putV
23160 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
23170 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  .**.*/.#define g
23180 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
23190 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
231a0 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
231b0 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
231c0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
231d0 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
231e0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
231f0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
23200 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
23210 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
23220 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
23230 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
23240 50 75 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  PutVarint32((A),
23250 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
23260 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
23270 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
23280 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
23290 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
232a0 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
232b0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
232c0 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20  nityStr(Vdbe *, 
232d0 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73  Index *);.void s
232e0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
232f0 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
23300 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
23310 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
23320 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
23330 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
23340 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
23350 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
23360 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
23370 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
23380 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
23390 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
233a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
233b0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
233c0 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
233d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
233e0 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  r(sqlite3*, int,
233f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
23400 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23410 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
23420 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
23430 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
23440 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
23450 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
23460 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
23470 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
23480 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
23490 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
234a0 53 51 4c 49 54 45 5f 54 45 53 54 29 20 0a 63 6f  SQLITE_TEST) .co
234b0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
234c0 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
234d0 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
234e0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
234f0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
23500 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
23510 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
23520 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
23530 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
23540 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
23550 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
23560 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
23570 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
23580 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
23590 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
235a0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
235b0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
235c0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
235d0 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
235e0 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
235f0 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
23600 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
23610 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
23620 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
23630 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
23640 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
23650 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
23660 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
23670 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
23680 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
23690 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
236a0 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
236b0 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
236c0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
236d0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
236e0 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
236f0 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
23700 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
23710 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
23720 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
23730 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
23740 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
23750 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
23760 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
23770 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
23780 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
23790 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
237a0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
237b0 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
237c0 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
237d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
237e0 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
237f0 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
23800 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
23810 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74  onst char *z,int
23820 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
23830 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
23840 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
23850 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
23860 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
23870 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
23880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
23890 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
238a0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
238b0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
238e0 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
238f0 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
23900 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
23910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
23920 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
23930 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
23940 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
23950 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
23960 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
23970 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
23980 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
23990 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
239a0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
239b0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
239c0 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
239d0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
239e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
239f0 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
23a00 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
23a10 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
23a20 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
23a30 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
23a40 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
23a50 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
23a60 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
23a70 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
23a80 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
23a90 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
23aa0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
23ab0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
23ac0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
23ad0 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
23ae0 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
23af0 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
23b00 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
23b10 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
23b20 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
23b30 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
23b40 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
23b50 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
23b60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23b70 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
23b80 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
23b90 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
23ba0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23bb0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
23bc0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
23bd0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23be0 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
23bf0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
23c00 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
23c10 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
23c20 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
23c30 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
23c40 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
23c50 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
23c60 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
23c70 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
23c80 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
23c90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
23ca0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
23cb0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
23cc0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
23cd0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
23ce0 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
23cf0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
23d00 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
23d10 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
23d20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23d30 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
23d40 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
23d50 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
23d60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
23d70 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
23d80 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
23d90 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
23da0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
23db0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
23dc0 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
23dd0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
23de0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23df0 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
23e00 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
23e10 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
23e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
23e30 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
23e40 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
23e50 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
23e60 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
23e70 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
23e80 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
23e90 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
23ea0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
23eb0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
23ec0 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
23ed0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
23ee0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23ef0 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
23f00 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
23f10 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
23f20 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
23f30 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
23f40 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
23f50 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
23f60 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
23f70 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
23f80 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
23f90 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
23fa0 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
23fb0 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
23fc0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
23fd0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
23fe0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
23ff0 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
24000 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
24010 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24020 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
24030 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
24040 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
24050 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
24060 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
24070 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
24080 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
24090 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
240a0 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
240b0 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
240c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
240d0 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
240e0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
240f0 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
24100 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
24110 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
24120 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
24130 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
24140 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
24150 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
24160 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
24170 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
24180 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
24190 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
241a0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
241b0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
241c0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
241d0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
241e0 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
241f0 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
24200 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
24210 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
24220 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
24230 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
24240 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
24250 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
24260 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
24270 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
24280 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
24290 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
242a0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
242b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
242c0 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
242d0 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
242e0 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
242f0 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
24300 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
24310 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
24320 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
24330 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
24340 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
24350 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
24360 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
24370 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
24380 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
24390 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
243a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
243b0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
243c0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
243d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
243e0 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
243f0 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
24400 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
24410 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
24420 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
24430 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
24440 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
24450 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24460 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
24470 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
24480 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
24490 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
244a0 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
244b0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
244c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
244d0 70 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 63  ppendSpace(StrAc
244e0 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  cum*,int);.char 
244f0 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
24500 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
24510 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24520 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
24530 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
24540 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
24550 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
24560 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
24570 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
24580 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
24590 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
245a0 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
245b0 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
245c0 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
245d0 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
245e0 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
245f0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
24600 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
24610 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
24620 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
24630 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
24640 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
24650 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
24660 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
24670 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
24680 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
24690 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
246a0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
246b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
246c0 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
246d0 65 64 52 65 63 6f 72 64 2a 29 3b 0a 23 65 6e 64  edRecord*);.#end
246e0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
246f0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
24700 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
24710 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
24720 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
24730 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
24740 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
24750 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
24760 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
24770 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
24780 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
24790 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
247a0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
247b0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
247c0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
247d0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
247e0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
247f0 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
24800 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
24810 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
24820 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
24830 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
24840 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
24850 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
24860 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
24870 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
24880 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
24890 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
248a0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
248b0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
248c0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
248d0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
248e0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
248f0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
24900 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
24910 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
24920 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
24930 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
24940 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
24950 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
24960 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
24970 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24980 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
24990 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
249a0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
249b0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
249c0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
249d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
249e0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
249f0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
24a00 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
24a10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24a20 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
24a30 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
24a40 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
24a50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24a60 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
24a70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
24a80 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
24a90 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
24aa0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
24ab0 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
24ac0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
24ad0 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
24ae0 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
24af0 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
24b00 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
24b10 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
24b20 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
24b30 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
24b40 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
24b50 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
24b60 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
24b70 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
24b80 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
24b90 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
24ba0 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
24bb0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
24bc0 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
24bd0 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
24be0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
24bf0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
24c00 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
24c10 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
24c20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
24c30 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
24c40 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
24c50 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
24c60 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
24c70 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
24c80 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
24c90 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
24ca0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
24cb0 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
24cc0 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
24cd0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
24ce0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
24cf0 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
24d00 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
24d10 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
24d20 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69  s==0).#endif.voi
24d30 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
24d40 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
24d50 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
24d60 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
24d70 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
24d80 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
24d90 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
24da0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
24db0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
24dc0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
24dd0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
24de0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
24df0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
24e00 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
24e10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
24e20 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
24e30 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
24e40 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
24e50 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
24e60 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
24e70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
24e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
24e90 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
24ea0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
24eb0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
24ec0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
24ed0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
24ee0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
24ef0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
24f00 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
24f10 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
24f20 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
24f30 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
24f40 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
24f50 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
24f60 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
24f70 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
24f80 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
24f90 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
24fa0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
24fb0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
24fc0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
24fd0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
24fe0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
24ff0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
25000 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
25010 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
25020 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
25030 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
25040 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
25050 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
25060 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
25070 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
25080 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
25090 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
250a0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
250b0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
250c0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
250d0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
250e0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
250f0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
25100 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
25110 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
25120 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
25130 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25140 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
25150 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
25160 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
25170 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
25180 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
25190 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
251a0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
251b0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
251c0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
251d0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
251e0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
251f0 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
25200 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
25210 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
25220 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
25230 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
25240 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
25250 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
25260 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
25270 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
25280 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
25290 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
252a0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
252b0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
252c0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
252d0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
252e0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
252f0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
25300 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
25310 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
25320 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
25330 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
25340 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
25350 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
25360 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
25370 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
25380 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
25390 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
253a0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
253b0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
253c0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
253d0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
253e0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
253f0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
25400 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
25410 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76  lity is .** prov
25420 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
25430 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
25440 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
25450 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
25460 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
25470 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25480 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
25490 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
254a0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
254b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
254c0 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
254d0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
254e0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
254f0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
25500 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
25510 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
25520 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25530 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
25540 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
25550 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
25560 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
25570 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
25580 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
25590 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
255a0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
255b0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
255c0 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
255d0 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
255e0 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
255f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
25600 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
25610 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
25620 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
25630 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
25640 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
25650 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
25660 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25670 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
25680 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
25690 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
256a0 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
256b0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
256c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
256d0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
256e0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
256f0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
25700 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
25710 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
25720 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
25730 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
25740 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
25750 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
25760 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
25770 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
25780 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
25790 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
257a0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
257b0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
257c0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
257d0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
257e0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
257f0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
25800 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
25810 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
25820 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
25830 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
25840 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
25850 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
25860 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
25870 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
25880 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
25890 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
258a0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
258b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
258c0 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
258d0 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
258e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
258f0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
25900 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
25910 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
25920 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
25930 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
25940 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
25950 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
25960 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
25970 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
25980 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
25990 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
259a0 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  if..#define IN_I
259b0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
259c0 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
259d0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
259e0 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
259f0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
25a00 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64 65  _ASC       3.#de
25a10 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
25a20 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a  DEX_DESC      4.
25a30 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
25a40 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
25a50 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a  Expr *, int*);..
25a60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
25a70 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54  ABLE_ATOMIC_WRIT
25a80 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  E.  int sqlite3J
25a90 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
25aa0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
25ab0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
25ac0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
25ad0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25ae0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
25af0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e  te3_vfs *);.  in
25b00 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
25b10 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
25b20 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ile *);.  int sq
25b30 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
25b40 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ts(sqlite3_file 
25b50 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  *p);.#else.  #de
25b60 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
25b70 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
25b80 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
25b90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25ba0 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28  e3JournalExists(
25bb0 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  p) 1.#endif..voi
25bc0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
25bd0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
25be0 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  file *);.int sql
25bf0 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69  ite3MemJournalSi
25c00 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ze(void);.int sq
25c10 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61  lite3IsMemJourna
25c20 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  l(sqlite3_file *
25c30 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  );..#if SQLITE_M
25c40 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
25c50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
25c60 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73  prSetHeight(Pars
25c70 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
25c80 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  *p);.  int sqlit
25c90 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
25ca0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
25cb0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
25cc0 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
25cd0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
25ce0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
25cf0 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c  ExprSetHeight(x,
25d00 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
25d10 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
25d20 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
25d30 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
25d40 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
25d50 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
25d60 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
25d70 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
25d80 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
25d90 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
25da0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
25db0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
25dc0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
25dd0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
25de0 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
25df0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25e00 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
25e10 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
25e20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25e30 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
25e40 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
25e50 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
25e60 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
25e70 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
25e80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
25e90 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
25ea0 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
25eb0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
25ec0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
25ed0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25ee0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
25ef0 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
25f00 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
25f10 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
25f20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
25f30 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73  E IOTRACE exists
25f40 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c   then the global
25f50 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c   variable.** sql
25f60 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61  ite3IoTrace is a
25f70 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72   pointer to a pr
25f80 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e  intf-like routin
25f90 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69  e used to.** pri
25fa0 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d  nt I/O tracing m
25fb0 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66  essages. .*/.#if
25fc0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25fd0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
25fe0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
25ff0 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
26000 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
26010 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
26020 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
26030 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
26040 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64  LITE_EXTERN void
26050 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63   (*sqlite3IoTrac
26060 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
26070 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
26080 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
26090 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
260a0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
260b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
260c0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
260d0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
260e0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
260f0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
26100 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
26110 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
26120 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
26130 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
26140 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
26150 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
26160 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
26170 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
26180 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
26190 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
261a0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
261b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
261c0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
261d0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
261e0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
261f0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
26200 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
26210 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
26220 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
26230 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
26240 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
26250 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
26260 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
26270 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
26280 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
26290 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
262a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
262b0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
262c0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
262d0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
262e0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
262f0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
26300 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
26310 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
26320 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
26330 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
26340 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
26350 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
26360 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
26370 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
26380 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26390 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
263a0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
263b0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
263c0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
263d0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
263e0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
263f0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
26400 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
26410 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
26420 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
26430 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
26440 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
26450 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
26460 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
26470 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
26480 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
26490 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
264a0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
264b0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
264c0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
264d0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
264e0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
264f0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
26500 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
26510 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
26520 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
26530 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
26540 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
26550 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
26560 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
26570 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
26580 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
26590 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
265a0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
265b0 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  . .**.** All of 
265c0 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
265d0 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
265e0 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
265f0 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
26600 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
26610 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
26620 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
26630 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
26640 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
26650 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
26660 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
26670 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
26680 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
26690 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
266a0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
266b0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
266c0 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
266d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
266e0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
266f0 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
26700 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
26710 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
26720 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
26730 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
26740 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
26750 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
26760 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
26770 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
26780 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
26790 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
267a0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
267b0 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67  DE  0x02  /* Mig
267c0 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
267d0 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f  kaside memory */
267e0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
267f0 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
26800 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
26810 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
26820 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
26830 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
26840 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
26850 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
26860 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20  e MEMTYPE_DB    
26870 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73       0x10  /* Us
26880 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  es sqlite3DbMall
26890 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d  oc, not sqlite_m
268a0 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66  alloc */..#endif
268b0 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48   /* _SQLITEINT_H
268c0 5f 20 2a 2f 0a                                   _ */.