/ Hex Artifact Content
Login

Artifact 4d6c5c87324c2b6218c01a0895c0d298fffb5aff:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
16b0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
16c0: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
16d0: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
16e0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
16f0: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1700: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1710: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1720: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1730: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1740: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1750: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23  ined(_MSC_VER).#
1760: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1770: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c  NOINLINE  __decl
1780: 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23  spec(noinline).#
1790: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53  else.#  define S
17a0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23  QLITE_NOINLINE.#
17b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
17c0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
17d0: 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65  FE macro must be
17e0: 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31   defined as 0, 1
17f0: 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61  , or 2..** 0 mea
1800: 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70  ns mutexes are p
1810: 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
1820: 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61  le and the libra
1830: 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74  ry is never.** t
1840: 68 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65  hreadsafe.  1 me
1850: 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ans the library 
1860: 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68  is serialized wh
1870: 69 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65  ich is the highe
1880: 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74  st.** level of t
1890: 68 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20  hreadsafety.  2 
18a0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
18b0: 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64  y is multithread
18c0: 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  ed - multiple.**
18d0: 20 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65   threads can use
18e0: 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20   SQLite as long 
18f0: 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64  as no two thread
1900: 73 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65  s try to use the
1910: 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73   same.** databas
1920: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20  e connection at 
1930: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a  the same time..*
1940: 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  *.** Older versi
1950: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
1960: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
1970: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
1980: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
1990: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a  hat for legacy..
19a0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
19b0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
19c0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
19d0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
19e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
19f0: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
1a00: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
1a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1a20: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
1a30: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
1a40: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
1a50: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
1a60: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
1a70: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
1a80: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
1a90: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
1aa0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
1ab0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
1ac0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
1ad0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
1ae0: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
1af0: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
1b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
1b10: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1b20: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
1b30: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   The SQLITE_DEFA
1b40: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61  ULT_MEMSTATUS ma
1b50: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1b60: 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30 20  ned as either 0 
1b70: 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65  or 1..** It dete
1b80: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
1b90: 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75 72  r not the featur
1ba0: 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a  es related to .*
1bb0: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
1bc0: 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61 76  MEMSTATUS are av
1bd0: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1be0: 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20  lt or not. This 
1bf0: 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20  value can.** be 
1c00: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72 75  overridden at ru
1c10: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
1c20: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
1c30: 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65   API..*/.#if !de
1c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
1c50: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
1c60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1c70: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1c80: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
1c90: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
1ca0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1cb0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
1cc0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
1cd0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
1ce0: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
1cf0: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
1d00: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
1d10: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1d20: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
1d30: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
1d40: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
1d50: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
1d60: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1d70: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
1d80: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
1d90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
1da0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
1db0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
1dc0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
1dd0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
1de0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
1df0: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
1e00: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
1e10: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
1e20: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
1e30: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
1e40: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
1e50: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
1e60: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
1e70: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
1e80: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
1e90: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
1ea0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
1eb0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
1ec0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
1ed0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
1ee0: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
1ef0: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
1f00: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
1f10: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
1f20: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
1f30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
1f40: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
1f50: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
1f60: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
1f70: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
1f80: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
1f90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1fa0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1fb0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1fc0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1fd0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1fe0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1ff0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2000: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2010: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2020: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2030: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2040: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2050: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2060: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2070: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
2080: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
2090: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
20a0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
20b0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
20c0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
20d0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
20e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20f0: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2100: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2110: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2120: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2130: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2140: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2150: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2160: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
2180: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
2190: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
21a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
21b0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
21c0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
21d0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
21e0: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
21f0: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2200: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2210: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2220: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2230: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2240: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2250: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2260: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2270: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
2280: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
2290: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
22a0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
22b0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
22c0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
22d0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
22e0: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
22f0: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2300: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2310: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2320: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2330: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2340: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2350: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2360: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2370: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
2380: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
2390: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
23a0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
23b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
23c0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
23d0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
23e0: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
23f0: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2400: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2410: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2420: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2430: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2440: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2450: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2460: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2470: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
2480: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
2490: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
24a0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
24b0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
24c0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
24d0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
24e0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
24f0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2500: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2510: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2520: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2530: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2540: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2550: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2560: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2570: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
2580: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
2590: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
25a0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
25b0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
25c0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25d0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
25e0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
25f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2600: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2610: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2620: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2640: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2650: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2660: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2670: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2680: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2690: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
26a0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
26b0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
26c0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
26d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
26e0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
26f0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2700: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2710: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2720: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2730: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2740: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2750: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2760: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2770: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2780: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2790: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
27a0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
27b0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
27c0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
27d0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
27e0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
27f0: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2800: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2810: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2820: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2830: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2840: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2850: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2860: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2870: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2880: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2890: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
28a0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
28b0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
28c0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
28d0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
28e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
28f0: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2900: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2910: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2920: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2930: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2940: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2950: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2960: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2970: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2980: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2990: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
29a0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
29b0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
29c0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
29d0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
29e0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
29f0: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2a00: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2a10: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2a20: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2a30: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2a40: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2a50: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2a60: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2a70: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2a80: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2a90: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2aa0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ab0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ac0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ad0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2ae0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2af0: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2b00: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2b10: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2b20: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b30: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2b40: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2b50: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2b60: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2b70: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2b80: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2b90: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2ba0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2bb0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2bc0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2bd0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
2be0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
2bf0: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
2c00: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
2c10: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
2c20: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
2c30: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
2c40: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
2c50: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
2c60: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
2c70: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
2c80: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
2c90: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
2ca0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
2cb0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
2cc0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
2cd0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
2ce0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
2cf0: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
2d00: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
2d10: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
2d20: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
2d30: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
2d40: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2d50: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2d60: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2d70: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
2d80: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
2d90: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
2da0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
2db0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
2dc0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
2dd0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
2de0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
2df0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
2e00: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
2e10: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
2e20: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
2e30: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
2e40: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
2e50: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
2e60: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
2e70: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
2e80: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
2e90: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
2ea0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
2eb0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
2ec0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
2ed0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
2ee0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
2ef0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
2f00: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
2f10: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
2f20: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
2f30: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
2f40: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
2f50: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
2f60: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
2f70: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
2f80: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
2f90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
2fa0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
2fb0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
2fc0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
2fd0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
2fe0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
2ff0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3000: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3010: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3020: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3030: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3040: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3050: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3060: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3070: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3080: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3090: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
30a0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
30b0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
30c0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
30d0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
30e0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
30f0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3100: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3110: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3120: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3130: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
3140: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
3150: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
3160: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
3170: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
3180: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
3190: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
31a0: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
31b0: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
31c0: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
31d0: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
31e0: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
31f0: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
3200: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
3210: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
3220: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
3230: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
3240: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
3250: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
3260: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
3270: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
3280: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
3290: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
32a0: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
32b0: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
32c0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
32d0: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
32e0: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
32f0: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
3300: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
3310: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
3320: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
3330: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
3340: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
3350: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
3360: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
3370: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
3380: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
3390: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
33a0: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
33b0: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
33c0: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
33d0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
33e0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
33f0: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
3400: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
3410: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
3420: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
3430: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  h>../*.** If com
3440: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
3450: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
3460: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
3470: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
3480: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
3490: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
34a0: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
34b0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
34c0: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
34d0: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
34e0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
34f0: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
3500: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3510: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
3520: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
3530: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
3540: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
3550: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
3560: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
3570: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
3580: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
3590: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
35a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
35b0: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
35c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
35d0: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
35e0: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
35f0: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
3600: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
3610: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
3620: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
3630: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
3640: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
3650: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
3660: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
3670: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
3680: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
3690: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
36a0: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
36b0: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
36c0: 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74  C compiler .** t
36d0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
36e0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
36f0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
3700: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
3710: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
3720: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
3730: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
3740: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
3750: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
3760: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3770: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
3780: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
3790: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
37a0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
37b0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
37c0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
37d0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
37e0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
37f0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
3800: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
3810: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
3820: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
3830: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
3840: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
3850: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
3860: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
3870: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
3880: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
3890: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
38a0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
38b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
38c0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
38d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
38e0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
38f0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
3900: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
3910: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
3920: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
3930: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
3940: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
3950: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3960: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
3970: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
3980: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3990: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
39a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
39b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
39c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
39d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
39e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
39f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
3a00: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
3a10: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3a20: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
3a30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
3a40: 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e  _STORE 1.# defin
3a50: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3a60: 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  ORE_xc 1  /* Exc
3a70: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
3a80: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
3a90: 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68  ** If no value h
3aa0: 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64  as been provided
3ab0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f   for SQLITE_MAX_
3ac0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
3ad0: 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f  or if.** SQLITE_
3ae0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65  TEMP_STORE is se
3af0: 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73  t to 3 (never us
3b00: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
3b10: 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74  s), set it .** t
3b20: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
3b30: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3b40: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
3b50: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
3b60: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3b70: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3b80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b90: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3ba0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
3bb0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
3bc0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
3bd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
3be0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
3bf0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
3c10: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3c20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3c30: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
3c40: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
3c50: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3c60: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
3c70: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3c80: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
3c90: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
3ca0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
3cb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
3cc0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
3cd0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
3ce0: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
3cf0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  dif.../*.** GCC 
3d00: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
3d10: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
3d20: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
3d30: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
3d40: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
3d50: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
3d60: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
3d70: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
3d80: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
3d90: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
3da0: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
3db0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
3dc0: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
3dd0: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
3de0: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
3df0: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
3e00: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
3e10: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
3e20: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
3e30: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  (B))../*.** Chec
3e40: 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73  k to see if this
3e50: 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42   machine uses EB
3e60: 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c  CDIC.  (Yes, bel
3e70: 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f  ieve it or.** no
3e80: 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69  t, there are sti
3e90: 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20  ll machines out 
3ea0: 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45  there that use E
3eb0: 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27  BCDIC.).*/.#if '
3ec0: 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64  A' == '\301'.# d
3ed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43  efine SQLITE_EBC
3ee0: 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  DIC 1.#else.# de
3ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49  fine SQLITE_ASCI
3f00: 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  I 1.#endif../*.*
3f10: 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e  * Integers of kn
3f20: 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73  own sizes.  Thes
3f30: 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74  e typedefs might
3f40: 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68   change for arch
3f50: 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65  itectures.** whe
3f60: 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72  re the sizes ver
3f70: 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72  y.  Preprocessor
3f80: 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69   macros are avai
3f90: 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68  lable so that th
3fa0: 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62  e.** types can b
3fb0: 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72  e conveniently r
3fc0: 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70  edefined at comp
3fd0: 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20  ile-type.  Like 
3fe0: 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  this:.**.**     
3ff0: 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54      cc '-DUINTPT
4000: 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67  R_TYPE=long long
4010: 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66   int' ....*/.#if
4020: 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  ndef UINT32_TYPE
4030: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
4040: 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT32_T.#  define
4050: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e   UINT32_TYPE uin
4060: 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t32_t.# else.#  
4070: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4080: 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a  PE unsigned int.
4090: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
40a0: 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ifndef UINT16_TY
40b0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
40c0: 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  UINT16_T.#  defi
40d0: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
40e0: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
40f0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
4100: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68  TYPE unsigned sh
4110: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4120: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
4130: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
4140: 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23  f HAVE_INT16_T.#
4150: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
4160: 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c  YPE int16_t.# el
4170: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
4180: 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e  16_TYPE short in
4190: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
41a0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54  .#ifndef UINT8_T
41b0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
41c0: 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  _UINT8_T.#  defi
41d0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69  ne UINT8_TYPE ui
41e0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
41f0: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
4200: 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a  E unsigned char.
4210: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
4220: 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ifndef INT8_TYPE
4230: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
4240: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  T8_T.#  define I
4250: 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a  NT8_TYPE int8_t.
4260: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4270: 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65   INT8_TYPE signe
4280: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
4290: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f  endif.#ifndef LO
42a0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20  NGDOUBLE_TYPE.# 
42b0: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
42c0: 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62  E_TYPE long doub
42d0: 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65  le.#endif.typede
42e0: 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69  f sqlite_int64 i
42f0: 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  64;          /* 
4300: 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  8-byte signed in
4310: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
4320: 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75   sqlite_uint64 u
4330: 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38  64;         /* 8
4340: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
4350: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4360: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33  f UINT32_TYPE u3
4370: 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2;           /* 
4380: 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  4-byte unsigned 
4390: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
43a0: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ef UINT16_TYPE u
43b0: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  16;           /*
43c0: 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   2-byte unsigned
43d0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
43e0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69  def INT16_TYPE i
43f0: 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  16;            /
4400: 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 2-byte signed 
4410: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4420: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38  ef UINT8_TYPE u8
4430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4440: 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   1-byte unsigned
4450: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
4460: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38  def INT8_TYPE i8
4470: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
4480: 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 1-byte signed 
4490: 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  integer */../*.*
44a0: 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  * SQLITE_MAX_U32
44b0: 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61   is a u64 consta
44c0: 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d  nt that is the m
44d0: 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65  aximum u64 value
44e0: 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20  .** that can be 
44f0: 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20  stored in a u32 
4500: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
4510: 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65  data.  The value
4520: 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30  .** is 0x0000000
4530: 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20  0ffffffff.  But 
4540: 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b  because of quirk
4550: 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c  s of some compil
4560: 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20  ers, we.** have 
4570: 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76  to specify the v
4580: 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73  alue in the less
4590: 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65   intuitive manne
45a0: 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66  r shown:.*/.#def
45b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  ine SQLITE_MAX_U
45c0: 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c  32  ((((u64)1)<<
45d0: 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  32)-1)../*.** Th
45e0: 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20  e datatype used 
45f0: 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74  to store estimat
4600: 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  es of the number
4610: 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a   of rows in a.**
4620: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
4630: 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73    This is an uns
4640: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79  igned integer ty
4650: 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f  pe.  For 99.9% o
4660: 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20  f.** the world, 
4670: 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  a 32-bit integer
4680: 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20   is sufficient. 
4690: 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e   But a 64-bit in
46a0: 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20  teger.** can be 
46b0: 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  used at compile-
46c0: 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e  time if desired.
46d0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
46e0: 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74  E_64BIT_STATS. t
46f0: 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63  ypedef u64 tRowc
4700: 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  nt;    /* 64-bit
4710: 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74   only if request
4720: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4730: 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70  me */.#else. typ
4740: 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74  edef u32 tRowcnt
4750: 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69  ;    /* 32-bit i
4760: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  s the default */
4770: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
4780: 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74  stimated quantit
4790: 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65  ies used for que
47a0: 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20  ry planning are 
47b0: 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74  stored as 16-bit
47c0: 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20  .** logarithms. 
47d0: 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c   For quantity X,
47e0: 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
47f0: 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e  d is 10*log2(X).
4800: 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20    This.** gives 
4810: 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65  a possible range
4820: 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70   of values of ap
4830: 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65  proximately 1.0e
4840: 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a  986 to 1e-986..*
4850: 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65  * But the allowe
4860: 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72  d values are "gr
4870: 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72  ainy".  Not ever
4880: 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65  y value is repre
4890: 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72  sentable..** For
48a0: 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69   example, quanti
48b0: 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61  ties 16 and 17 a
48c0: 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e  re both represen
48d0: 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a  ted by a LogEst.
48e0: 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76  ** of 40.  Howev
48f0: 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74  er, since LogEst
4900: 20 71 75 61 6e 74 61 74 69 65 73 20 61 72 65 20   quantaties are 
4910: 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73  suppose to be es
4920: 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20  timates,.** not 
4930: 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68  exact values, th
4940: 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69  is imprecision i
4950: 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e  s not a problem.
4960: 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20  .**.** "LogEst" 
4970: 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f  is short for "Lo
4980: 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61  garithmic Estima
4990: 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70  te"..**.** Examp
49a0: 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d  les:.**      1 -
49b0: 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20  > 0             
49c0: 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20   20 -> 43       
49d0: 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a     10000 -> 132.
49e0: 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20  **      2 -> 10 
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d              25 -
4a00: 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35  > 46          25
4a10: 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20  000 -> 146.**   
4a20: 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20     3 -> 16      
4a30: 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20        100 -> 66 
4a40: 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d         1000000 -
4a50: 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20  > 199.**      4 
4a60: 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20  -> 20           
4a70: 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20  1000 -> 99      
4a80: 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30    1048576 -> 200
4a90: 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33  .**     10 -> 33
4aa0: 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20             1024 
4ab0: 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36  -> 100    429496
4ac0: 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a  7296 -> 320.**.*
4ad0: 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e  * The LogEst can
4ae0: 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20   be negative to 
4af0: 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f  indicate fractio
4b00: 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20  nal values. .** 
4b10: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
4b20: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
4b30: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
4b40: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
4b50: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
4b60: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
4b70: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  gEst;../*.** Mac
4b80: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
4b90: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
4ba0: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
4bb0: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
4bc0: 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
4bd0: 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69  not that determi
4be0: 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69  nation is run-ti
4bf0: 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69  me or compile-ti
4c00: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65  me..**.** For be
4c10: 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  st performance, 
4c20: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
4c30: 64 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74  de to guess at t
4c40: 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a  he byte-order.**
4c50: 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63   using C-preproc
4c60: 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49  essor macros.  I
4c70: 66 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63  f that is unsucc
4c80: 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a  essful, or if.**
4c90: 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d   -DSQLITE_RUNTIM
4ca0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73  E_BYTEORDER=1 is
4cb0: 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d   set, then byte-
4cc0: 6f 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69  order is determi
4cd0: 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69  ned.** at run-ti
4ce0: 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  me..*/.#ifdef SQ
4cf0: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
4d00: 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  N.const int sqli
4d10: 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73  te3one = 1;.#els
4d20: 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69  e.extern const i
4d30: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23  nt sqlite3one;.#
4d40: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
4d50: 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20  ed(i386)     || 
4d60: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
4d70: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
4d80: 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a  M_IX86) ||    \.
4d90: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78       defined(__x
4da0: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
4db0: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c  d(__x86_64__) ||
4dc0: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29   defined(_M_X64)
4dd0: 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64    ||    \.     d
4de0: 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29  efined(_M_AMD64)
4df0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
4e00: 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  RM)     || defin
4e10: 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20  ed(__x86)   ||  
4e20: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
4e30: 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64  (__arm__)) && !d
4e40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55  efined(SQLITE_RU
4e50: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29  NTIME_BYTEORDER)
4e60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4e70: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
4e80: 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  34.# define SQLI
4e90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4ea0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4eb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4ec0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4ed0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4ee0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e  LITE_UTF16LE.#en
4ef0: 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64  dif.#if (defined
4f00: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
4f10: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20  fined(__ppc__)) 
4f20: 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e   \.    && !defin
4f30: 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d  ed(SQLITE_RUNTIM
4f40: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64  E_BYTEORDER).# d
4f50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
4f60: 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23  EORDER    4321.#
4f70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
4f80: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
4f90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
4fa0: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
4fb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
4fc0: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
4fd0: 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a  _UTF16BE.#endif.
4fe0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
4ff0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  ITE_BYTEORDER).#
5000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5010: 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20  YTEORDER    0   
5020: 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e    /* 0 means "un
5030: 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65  known at compile
5040: 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69  -time" */.# defi
5050: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5060: 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a  IAN    (*(char *
5070: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5080: 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  0).# define SQLI
5090: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
50a0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
50b0: 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65  te3one)==1).# de
50c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
50d0: 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45  6NATIVE  (SQLITE
50e0: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
50f0: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
5100: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
5110: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74  ../*.** Constant
5120: 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73  s for the larges
5130: 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70  t and smallest p
5140: 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73  ossible 64-bit s
5150: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a  igned integers..
5160: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
5170: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
5180: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
5190: 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  n both 32-bit an
51a0: 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70  d 64-bit.** comp
51b0: 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ilers..*/.#defin
51c0: 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  e LARGEST_INT64 
51d0: 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28   (0xffffffff|(((
51e0: 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  i64)0x7fffffff)<
51f0: 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d  <32)).#define SM
5200: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28  ALLEST_INT64 (((
5210: 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53  i64)-1) - LARGES
5220: 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a  T_INT64)../* .**
5230: 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62   Round up a numb
5240: 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c  er to the next l
5250: 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f  arger multiple o
5260: 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73  f 8.  This is us
5270: 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38  ed.** to force 8
5280: 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20  -byte alignment 
5290: 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74  on 64-bit archit
52a0: 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66  ectures..*/.#def
52b0: 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20  ine ROUND8(x)   
52c0: 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a    (((x)+7)&~7)..
52d0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e  /*.** Round down
52e0: 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20   to the nearest 
52f0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f  multiple of 8.*/
5300: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f  .#define ROUNDDO
5310: 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a  WN8(x) ((x)&~7).
5320: 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68  ./*.** Assert th
5330: 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58  at the pointer X
5340: 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61   is aligned to a
5350: 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72  n 8-byte boundar
5360: 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72  y.  This.** macr
5370: 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77  o is used only w
5380: 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74  ithin assert() t
5390: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
53a0: 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61  e code gets.** a
53b0: 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73  ll alignment res
53c0: 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63  trictions correc
53d0: 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c  t..**.** Except,
53e0: 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54   if SQLITE_4_BYT
53f0: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
5400: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
5410: 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79  n the.** underly
5420: 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70  ing malloc() imp
5430: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
5440: 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79  t return us 4-by
5450: 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f  te aligned.** po
5460: 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74  inters.  In that
5470: 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69   case, only veri
5480: 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d  fy 4-byte alignm
5490: 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ent..*/.#ifdef S
54a0: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
54b0: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65  GNED_MALLOC.# de
54c0: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
54d0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
54e0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
54f0: 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a  char*)0)&3)==0).
5500: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
5510: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
5520: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
5530: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
5540: 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66  0)&7)==0).#endif
5550: 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20  ../*.** Disable 
5560: 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d  MMAP on platform
5570: 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e  s where it is kn
5580: 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a  own to not work.
5590: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
55a0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64  _OpenBSD__) || d
55b0: 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f  efined(__QNXNTO_
55c0: 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  _).# undef SQLIT
55d0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
55e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
55f0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
5600: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
5610: 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69  fault maximum si
5620: 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65  ze of memory use
5630: 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70  d by memory-mapp
5640: 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46  ed I/O in the VF
5650: 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50  S.*/.#ifdef __AP
5660: 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20  PLE__.# include 
5670: 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e  <TargetCondition
5680: 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47  als.h>.# if TARG
5690: 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20  ET_OS_IPHONE.#  
56a0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
56b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20  X_MMAP_SIZE.#   
56c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
56d0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
56e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
56f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5700: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
5710: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
5720: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
5730: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
5740: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
5750: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
5760: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
5770: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a   defined(__sun).
5780: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5790: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
57a0: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
57b0: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
57c0: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
57d0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
57e0: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20  IZE 0.# endif.# 
57f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5800: 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31  X_MMAP_SIZE_xc 1
5810: 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d   /* exclude from
5820: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
5830: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
5840: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
5850: 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70  is zero on all p
5860: 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65  latforms.  Or, e
5870: 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a  ven if a larger.
5880: 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  ** default MMAP_
5890: 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65  SIZE is specifie
58a0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
58b0: 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  e, make sure tha
58c0: 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  t it does.** not
58d0: 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69   exceed the maxi
58e0: 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a  mum mmap size..*
58f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
5910: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
5920: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5930: 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20  SIZE 0.# define 
5940: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5950: 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f  MAP_SIZE_xc 1  /
5960: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
5970: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
5980: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5990: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
59a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
59b0: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
59c0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
59d0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
59e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
59f0: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
5a00: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
5a10: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e  f../*.** Only on
5a20: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
5a30: 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49  LE_STAT3 or SQLI
5a40: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20  TE_ENABLE_STAT4 
5a50: 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a  can be defined..
5a60: 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67  ** Priority is g
5a70: 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45  iven to SQLITE_E
5a80: 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66  NABLE_STAT4.  If
5a90: 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69   either are defi
5aa0: 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66  ned, also.** def
5ab0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
5ac0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5ad0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
5ae0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23  E_ENABLE_STAT4.#
5af0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
5b00: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
5b10: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
5b20: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5b30: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
5b40: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
5b50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
5b60: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5b70: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
5b80: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
5b90: 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  R_STAT4.# undef 
5ba0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5bb0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e  AT3_OR_STAT4.#en
5bc0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
5bd0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
5be0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5bf0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
5c00: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
5c10: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
5c20: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
5c30: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
5c40: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
5c50: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
5c60: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
5c70: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
5c80: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
5c90: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
5ca0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
5cb0: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
5cc0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
5cd0: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
5ce0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
5cf0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
5d00: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
5d10: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
5d20: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
5d30: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
5d40: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
5d50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5d60: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
5d70: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
5d80: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
5d90: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
5da0: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
5db0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
5dc0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5de0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
5df0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
5e00: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5e20: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
5e30: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
5e40: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
5e50: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
5e60: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
5e70: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
5e80: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
5e90: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
5ea0: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
5eb0: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
5ec0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
5ed0: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
5ee0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
5ef0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
5f00: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
5f10: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
5f20: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
5f30: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
5f40: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
5f50: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
5f60: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
5f70: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
5f80: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
5f90: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
5fa0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
5fb0: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
5fc0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
5fd0: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
5fe0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
5ff0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6000: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
6010: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
6020: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
6030: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6040: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6050: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6060: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
6070: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
6080: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
6090: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
60a0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
60b0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
60c0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
60d0: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
60e0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
60f0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
6100: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
6110: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
6120: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
6130: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6140: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6150: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6160: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
6170: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
6180: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
6190: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
61a0: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
61b0: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
61c0: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
61d0: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
61e0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
61f0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
6200: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
6210: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
6220: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
6230: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6240: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6250: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6260: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
6270: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
6280: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
6290: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
62a0: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
62b0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
62c0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
62d0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
62e0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
62f0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
6300: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
6310: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
6320: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
6330: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6340: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6350: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6360: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
6370: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
6380: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
6390: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
63a0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
63b0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
63c0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
63d0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
63e0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
63f0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
6400: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
6410: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
6420: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
6430: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6440: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6450: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6460: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
6470: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
6480: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
6490: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
64a0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
64b0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
64c0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
64d0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
64e0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
64f0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6500: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6510: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6520: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6530: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6540: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6550: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6560: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
6570: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
6580: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
6590: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
65a0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
65b0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
65c0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
65d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
65e0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
65f0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6600: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6610: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6620: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6630: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6640: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6650: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6660: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
6670: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
6680: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
6690: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
66a0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
66b0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
66c0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
66d0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
66e0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
66f0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6700: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6710: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6720: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6730: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6740: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6750: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6760: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
6770: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
6780: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
6790: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
67a0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
67b0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
67c0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
67d0: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
67e0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
67f0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6800: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6810: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6820: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6830: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6840: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6850: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6860: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
6870: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
6880: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
6890: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
68a0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
68b0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
68c0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
68d0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
68e0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
68f0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6900: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6910: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6920: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6930: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6940: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6950: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6960: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6970: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6980: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6990: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
69a0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
69b0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
69c0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
69d0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
69e0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
69f0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6a00: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6a10: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6a20: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6a30: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
6a40: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
6a50: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
6a60: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
6a70: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
6a80: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
6a90: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
6aa0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
6ab0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
6ac0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
6ad0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
6ae0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
6af0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
6b00: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
6b10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
6b20: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
6b30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6b40: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
6b50: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
6b60: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
6b70: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
6b80: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6b90: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
6ba0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6bb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
6bc0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
6bd0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
6be0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
6bf0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
6c00: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
6c10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c20: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
6c30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6c40: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
6c50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
6c60: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
6c70: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
6c80: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
6c90: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
6ca0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
6cb0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
6cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6cd0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
6ce0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6cf0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
6d00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
6d10: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
6d20: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
6d30: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
6d40: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
6d50: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
6d60: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
6d70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6d80: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
6d90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
6da0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
6db0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
6dc0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
6dd0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6de0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
6df0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
6e00: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
6e10: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
6e20: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
6e30: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
6e40: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
6e50: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
6e60: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
6e70: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
6e80: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
6e90: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
6ea0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
6eb0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
6ec0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
6ed0: 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65 20  truct PreUpdate 
6ee0: 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64  PreUpdate;.typed
6ef0: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
6f00: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
6f10: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
6f20: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
6f30: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
6f40: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
6f50: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
6f60: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6f70: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
6f80: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
6f90: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
6fa0: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
6fb0: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
6fc0: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
6fd0: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
6fe0: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
6ff0: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
7000: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
7010: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
7020: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
7030: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
7040: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
7050: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
7060: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
7070: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
7080: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
7090: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
70a0: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
70b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
70c0: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
70d0: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
70e0: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
70f0: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
7100: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
7110: 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c  uct VTable VTabl
7120: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7130: 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74  t VtabCtx VtabCt
7140: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
7150: 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b  t Walker Walker;
7160: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7170: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
7180: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
7190: 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a  uct With With;..
71a0: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
71b0: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
71c0: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
71d0: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
71e0: 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65   .** "BusyHandle
71f0: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
7200: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
7210: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
7220: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
7230: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
7240: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
7250: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
7260: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
7270: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
7280: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
7290: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
72a0: 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f  .h"..#include "o
72b0: 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d  s.h".#include "m
72c0: 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20  utex.h".../*.** 
72d0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
72e0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
72f0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
7300: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
7310: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
7320: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
7330: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
7340: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
7350: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
7360: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
7370: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
7380: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
7390: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
73a0: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
73b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
73c0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
73d0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
73e0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
73f0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
7400: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
7410: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  Db {.  char *zNa
7420: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
7430: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
7440: 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20  base */.  Btree 
7450: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
7460: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
7470: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
7480: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
7490: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
74a0: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
74b0: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
74c0: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
74d0: 6b 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  k */.  Schema *p
74e0: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
74f0: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
7500: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
7510: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
7520: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
7530: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
7540: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
7550: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
7560: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
7570: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
7580: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
7590: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
75a0: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
75b0: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
75c0: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
75d0: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
75e0: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
75f0: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
7600: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
7610: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
7620: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
7630: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
7640: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
7650: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
7660: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
7670: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
7680: 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63  bject..** .** Sc
7690: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
76a0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
76b0: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
76c0: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
76d0: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
76e0: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
76f0: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
7700: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
7710: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
7720: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
7730: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
7740: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
7750: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
7760: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
7770: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
7780: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
7790: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
77a0: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
77b0: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
77c0: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
77d0: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
77e0: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
77f0: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
7800: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
7810: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
7820: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
7830: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
7840: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
7850: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
7860: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
7870: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
7880: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
7890: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
78a0: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
78b0: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
78c0: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
78d0: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
78e0: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
78f0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
7900: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
7910: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
7920: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
7930: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
7940: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
7950: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
7960: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
7970: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
7980: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
7990: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
79a0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
79b0: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
79c0: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
79d0: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
79e0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
79f0: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
7a00: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
7a10: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
7a20: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
7a30: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
7a40: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
7a50: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
7a60: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
7a70: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
7a80: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
7a90: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
7aa0: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
7ab0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
7ac0: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
7ad0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
7ae0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
7af0: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
7b00: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
7b10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7b20: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
7b30: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
7b40: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
7b50: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
7b60: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
7b70: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
7b80: 74 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65  the .** Db.pSche
7b90: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
7ba0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61  .*/.#define DbHa
7bb0: 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  sProperty(D,I,P)
7bc0: 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b       (((D)->aDb[
7bd0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
7be0: 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  maFlags&(P))==(P
7bf0: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
7c00: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
7c10: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
7c20: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
7c30: 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  aFlags&(P))!=0).
7c40: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
7c50: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7c60: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
7c70: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
7c80: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
7c90: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
7ca0: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
7cb0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
7cc0: 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  emaFlags&=~(P)..
7cd0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
7ce0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
7cf0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
7d00: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
7d10: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
7d20: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
7d30: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
7d40: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
7d50: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
7d60: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
7d70: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
7d80: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
7d90: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
7da0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
7db0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
7dc0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
7dd0: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
7de0: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
7df0: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
7e00: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
7e10: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
7e20: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
7e30: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
7e40: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
7e50: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
7e60: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
7e70: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
7e80: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
7e90: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
7ea0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
7eb0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
7ec0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
7ed0: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
7ee0: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
7ef0: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
7f00: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
7f10: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
7f20: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
7f30: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
7f40: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
7f50: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
7f60: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
7f70: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
7f80: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
7f90: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
7fa0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
7fb0: 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f  ER_THREADS+1)../
7fc0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
7fd0: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
7fe0: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
7ff0: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
8000: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
8010: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
8020: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
8030: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
8040: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
8050: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
8060: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
8070: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
8080: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
8090: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
80a0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
80b0: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
80c0: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
80d0: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
80e0: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
80f0: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
8100: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
8110: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
8120: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
8130: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
8140: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
8150: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
8160: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
8170: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
8180: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
8190: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
81a0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
81b0: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
81c0: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
81d0: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
81e0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
81f0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
8200: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
8210: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
8220: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
8230: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
8240: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
8250: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
8260: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
8270: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
8280: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
8290: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
82a0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
82b0: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
82c0: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
82d0: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
82e0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
82f0: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
8300: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
8310: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
8320: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
8330: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
8340: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
8350: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
8360: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
8370: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
8380: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
8390: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
83a0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
83b0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
83c0: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
83d0: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
83e0: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
83f0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
8400: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
8410: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
8420: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
8430: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
8440: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
8450: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8460: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
8470: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
8480: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
8490: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
84a0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
84b0: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
84d0: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
84e0: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
84f0: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
8500: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
8510: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
8520: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
8530: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
8540: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
8550: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
8560: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
8570: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
8580: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
8590: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
85a0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
85b0: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
85c0: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
85d0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
85e0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
85f0: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
8600: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
8610: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
8620: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
8630: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
8640: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
8650: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
8660: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
8670: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
8680: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
8690: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
86a0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
86b0: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
86c0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
86d0: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
86e0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
86f0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
8700: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
8710: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
8720: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
8730: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
8740: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
8750: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
8760: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
8770: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
8780: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
8790: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
87a0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
87b0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
87c0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
87d0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
87e0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
87f0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
8800: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
8810: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
8820: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
8830: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
8840: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
8850: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
8860: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
8870: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
8880: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
8890: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
88a0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
88b0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
88c0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
88d0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
88e0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
88f0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
8900: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
8910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8920: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
8930: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
8960: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
8970: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
8980: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
8990: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
89a0: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
89b0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
89c0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
89e0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
89f0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
8a00: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
8a10: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
8a30: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
8a40: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
8a50: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
8a60: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
8a70: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
8a80: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
8a90: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
8aa0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
8ab0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8ac0: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
8ad0: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
8ae0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8b00: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
8b10: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
8b20: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
8b30: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8b50: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
8b60: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
8b70: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
8b80: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
8b90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
8ba0: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
8bb0: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
8bc0: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
8bd0: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
8be0: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
8bf0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
8c00: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
8c10: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
8c20: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
8c30: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
8c40: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
8c50: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
8c60: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
8c70: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
8c80: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
8c90: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
8ca0: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
8cb0: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
8cc0: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
8cd0: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
8ce0: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
8cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
8d00: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
8d10: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
8d20: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
8d30: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
8d40: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
8d50: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
8d60: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
8d70: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
8d80: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
8d90: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
8da0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
8db0: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
8dc0: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
8dd0: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
8de0: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
8df0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
8e00: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
8e10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8e20: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
8e30: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
8e40: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
8e50: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e70: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
8e80: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
8e90: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
8ea0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
8ec0: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
8ed0: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
8ee0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
8ef0: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
8f00: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
8f10: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
8f20: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
8f30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
8f40: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
8f50: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
8f60: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
8f70: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
8f80: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
8f90: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
8fa0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
8fb0: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
8fc0: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
8fd0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
8fe0: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
8ff0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
9000: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9020: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
9030: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
9040: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
9050: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
9060: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
9070: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
9080: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
9090: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
90a0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
90b0: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
90c0: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
90d0: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
90e0: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
90f0: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
9100: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9110: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
9120: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
9130: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9150: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
9160: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
9170: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
9180: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
91a0: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
91b0: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
91c0: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
91d0: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
91f0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
9200: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
9210: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
9220: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
9230: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9240: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
9250: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
9260: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
9270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9280: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
9290: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
92a0: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
92b0: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
92c0: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
92d0: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
92e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
92f0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9310: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
9320: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
9330: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
9340: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
9350: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
9360: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
9370: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
9380: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
9390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93a0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
93b0: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
93c0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
93d0: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
93e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
93f0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
9400: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
9410: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
9420: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
9430: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
9440: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
9450: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
9460: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
9470: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9480: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
9490: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
94a0: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
94b0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
94c0: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
94d0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
94e0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
94f0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
9500: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
9510: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
9520: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9530: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
9540: 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  64);.#ifdef SQLI
9550: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
9560: 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20  ATE_HOOK.  void 
9570: 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20  *pPreUpdateArg; 
9580: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9590: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50  t argument to xP
95a0: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
95b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
95c0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  eUpdateCallback)
95d0: 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65  (   /* Registere
95e0: 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
95f0: 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29  preupdate_hook()
9600: 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71   */.    void*,sq
9610: 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20  lite3*,int,char 
9620: 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73  const*,char cons
9630: 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  t*,sqlite3_int64
9640: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20  ,sqlite3_int64. 
9650: 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20   );.  PreUpdate 
9660: 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20  *pPreUpdate;    
9670: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
9680: 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70  or active pre-up
9690: 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  date callback */
96a0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
96b0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
96c0: 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64  TE_HOOK */.#ifnd
96d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
96e0: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
96f0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
9700: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
9710: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
9720: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
9730: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
9740: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
9750: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
9760: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
9770: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
9780: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
9790: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
97a0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
97b0: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
97c0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
97d0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
97e0: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
97f0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
9800: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
9810: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
9820: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
9830: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
9840: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
9850: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
9860: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
9870: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
9880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
9890: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
98a0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
98b0: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
98c0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
98d0: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
98e0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
98f0: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
9900: 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41  ATION.  int (*xA
9910: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
9920: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9930: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9940: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
9950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
9980: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
9990: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
99a0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
99b0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
99c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
99d0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
99e0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
99f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
9a00: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
9a10: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
9a20: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
9a30: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
9a40: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
9a50: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
9a60: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
9a70: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
9a80: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
9a90: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
9aa0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
9ab0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9ac0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
9ad0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
9ae0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
9af0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
9b00: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
9b10: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
9b20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
9b30: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
9b40: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
9b50: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
9b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
9b70: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
9b80: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
9b90: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
9ba0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
9bb0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
9bc0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
9bd0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
9be0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
9bf0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
9c00: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
9c10: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
9c20: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
9c30: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
9c40: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
9c50: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
9c60: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
9c70: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
9c80: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
9c90: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
9ca0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
9cb0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
9cc0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
9cd0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
9ce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9cf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
9d00: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
9d10: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
9d20: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
9d30: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
9d40: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
9d60: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
9d70: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
9d80: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
9d90: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
9da0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
9db0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
9dc0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
9dd0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
9de0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
9df0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
9e00: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
9e10: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9e30: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
9e40: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
9e50: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
9e60: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
9e70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9e80: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
9e90: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
9ea0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
9eb0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
9ec0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
9ed0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
9ee0: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
9ef0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
9f00: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
9f10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
9f20: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
9f30: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
9f40: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
9f50: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
9f60: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
9f70: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
9f80: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
9f90: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
9fa0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
9fb0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
9fc0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
9fd0: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
9fe0: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
9ff0: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
a000: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
a010: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
a020: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
a030: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
a040: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
a050: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
a060: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
a070: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
a080: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
a090: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
a0a0: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
a0b0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
a0c0: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
a0d0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
a0e0: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
a0f0: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
a100: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
a110: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
a120: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
a130: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
a140: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
a150: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
a160: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
a170: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
a180: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
a190: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
a1a0: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
a1b0: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
a1c0: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
a1d0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
a1e0: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
a1f0: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
a200: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a220: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
a230: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
a240: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
a250: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
a260: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
a270: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
a280: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
a290: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
a2a0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
a2b0: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
a2c0: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
a2d0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
a2e0: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
a2f0: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
a300: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
a310: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
a320: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
a330: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
a340: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
a350: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
a360: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
a370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a380: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
a390: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
a3a0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
a3b0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
a3c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
a3d0: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
a3e0: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
a3f0: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
a400: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
a410: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
a420: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
a430: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
a440: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
a450: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
a460: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
a470: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
a480: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
a490: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
a4a0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
a4b0: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
a4c0: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
a4d0: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
a4e0: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
a4f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a500: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
a510: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
a520: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
a530: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
a540: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a550: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
a560: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
a570: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
a580: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
a590: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
a5a0: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
a5b0: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
a5c0: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
a5d0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a600: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
a610: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
a620: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a650: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
a660: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
a670: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
a680: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
a690: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
a6a0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
a6b0: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
a6c0: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6f0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
a700: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
a710: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
a720: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
a730: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
a740: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
a750: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
a760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
a770: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
a780: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
a790: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
a7a0: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
a7b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
a7c0: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
a7d0: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
a7e0: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
a7f0: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
a800: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
a810: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
a820: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
a830: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
a840: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
a850: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
a860: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
a870: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
a880: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
a890: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
a8a0: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
a8b0: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
a8c0: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
a8d0: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
a8e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
a8f0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
a900: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
a910: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
a920: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
a930: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
a940: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
a950: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
a960: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
a970: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a980: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
a990: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
a9a0: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
a9b0: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
a9c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
a9d0: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
a9e0: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
a9f0: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
aa00: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
aa10: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
aa20: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
aa30: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
aa40: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
aa50: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
aa60: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
aa70: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
aa80: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
aa90: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
aaa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
aab0: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
aac0: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
aad0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
aae0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
aaf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
ab00: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
ab10: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
ab20: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
ab30: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ab40: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
ab50: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
ab60: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
ab70: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
ab80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
ab90: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
aba0: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
abb0: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
abc0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
abd0: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
abe0: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
abf0: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
ac00: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
ac10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
ac20: 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30  beEQP        0x0
ac30: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  4000000  /* Debu
ac40: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
ac50: 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  PLAN */.../*.** 
ac60: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
ac70: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
ac80: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
ac90: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
aca0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
acb0: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
acc0: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
acd0: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
ace0: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
acf0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
ad00: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
ad10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad20: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
ad30: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
ad40: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
ad50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad60: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
ad70: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
ad80: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
ad90: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
ada0: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
adb0: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
adc0: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
add0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ade0: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
adf0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
ae00: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
ae10: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
ae20: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
ae30: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
ae40: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
ae50: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
ae60: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
ae70: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
ae80: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
ae90: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
aea0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
aeb0: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
aec0: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
aed0: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
aee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
aef0: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
af00: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
af10: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
af20: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
af30: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
af40: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
af50: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
af60: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
af70: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
af80: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
af90: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
afa0: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
afb0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
afc0: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
afd0: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
afe0: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
aff0: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
b000: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b010: 5f 53 74 61 74 33 20 20 20 20 20 20 20 20 20 20  _Stat3          
b020: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
b030: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33  the SQLITE_STAT3
b040: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
b050: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
b060: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
b070: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
b080: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
b090: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
b0a0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
b0b0: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
b0c0: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
b0d0: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
b0e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b0f0: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
b100: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b110: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
b120: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
b130: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
b140: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
b150: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
b160: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
b170: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
b180: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
b190: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b1a0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
b1b0: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
b1c0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
b1d0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
b1e0: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
b1f0: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
b200: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
b210: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
b220: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
b230: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
b240: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
b250: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
b260: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
b270: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
b280: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
b290: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
b2a0: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
b2b0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
b2c0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
b2d0: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
b2e0: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
b2f0: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
b300: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
b310: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
b320: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
b330: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
b340: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
b350: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
b360: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
b370: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
b380: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
b390: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
b3a0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
b3b0: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
b3c0: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
b3d0: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
b3e0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
b3f0: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
b400: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
b410: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
b420: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b430: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
b440: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
b450: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
b460: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
b470: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
b480: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
b490: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
b4a0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
b4b0: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
b4c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
b4d0: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
b4e0: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
b4f0: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
b500: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
b510: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
b520: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
b530: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
b540: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b550: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
b560: 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74    A pointer to t
b570: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
b580: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
b590: 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68  qlite.aFunc.** h
b5a0: 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e  ash table.  When
b5b0: 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69   multiple functi
b5c0: 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d  ons have the sam
b5d0: 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68  e name, the hash
b5e0: 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73   table.** points
b5f0: 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   to a linked lis
b600: 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  t of these struc
b610: 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tures..*/.struct
b620: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36   FuncDef {.  i16
b630: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
b640: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
b650: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
b660: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
b670: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
b680: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
b690: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
b6a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
b6b0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
b6c0: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
b6d0: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
b6e0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
b6f0: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
b700: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
b710: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
b720: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
b730: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
b740: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
b750: 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e  ; /* Regular fun
b760: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
b770: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
b780: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b790: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
b7a0: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65  /* Aggregate ste
b7b0: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
b7c0: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
b7d0: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
b7e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
b7f0: 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65  gregate finalize
b800: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  r */.  char *zNa
b810: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  me;         /* S
b820: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
b830: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75  unction. */.  Fu
b840: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
b850: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
b860: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
b870: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
b880: 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74  sh */.  FuncDest
b890: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
b8a0: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
b8b0: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
b8c0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
b8d0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
b8e0: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
b8f0: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
b900: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
b910: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
b920: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
b930: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
b940: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
b950: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
b960: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
b970: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
b980: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
b990: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
b9a0: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
b9b0: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
b9c0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
b9d0: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
b9e0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
b9f0: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a  nRef is set to .
ba00: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
ba10: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
ba20: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
ba30: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
ba40: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
ba50: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
ba60: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
ba70: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
ba80: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
ba90: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
baa0: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
bab0: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
bac0: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
bad0: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
bae0: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
baf0: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
bb00: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
bb10: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
bb20: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
bb30: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
bb40: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
bb50: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
bb60: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
bb70: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
bb80: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
bb90: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
bba0: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
bbb0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
bbc0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
bbd0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
bbe0: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
bbf0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
bc00: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
bc10: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
bc20: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
bc30: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
bc40: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
bc50: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
bc60: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
bc70: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
bc80: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
bc90: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
bca0: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54  AG_TYPEOFARG.  T
bcb0: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
bcc0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
bcd0: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
bce0: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23  erify this..*/.#
bcf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
bd00: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30  NC_ENCMASK  0x00
bd10: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
bd20: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
bd30: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
bd40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
bd50: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
bd60: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
bd70: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
bd80: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
bd90: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
bda0: 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20 2f  CASE     0x008 /
bdb0: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
bdc0: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
bdd0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
bde0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
bdf0: 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68      0x010 /* Eph
be00: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
be10: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
be20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
be30: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20  _NEEDCOLL 0x020 
be40: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
be50: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
be60: 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64   be called */.#d
be70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
be80: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30  C_LENGTH   0x040
be90: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
bea0: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
beb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bec0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
bed0: 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x080 /* Built-in
bee0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
bef0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
bf00: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
bf10: 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c     0x100 /* Buil
bf20: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
bf30: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
bf40: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
bf50: 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a  OALESCE 0x200 /*
bf60: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
bf70: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
bf80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bf90: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
bfa0: 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x400 /* Built-
bfb0: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
bfc0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
bfd0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
bfe0: 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20  NSTANT 0x800 /* 
bff0: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
c000: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
c010: 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  output */../*.**
c020: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
c030: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
c040: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
c050: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
c060: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
c070: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
c080: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
c090: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
c0a0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
c0b0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
c0c0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
c0d0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
c0e0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
c0f0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
c100: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
c110: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
c120: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
c130: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
c140: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
c150: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
c160: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
c170: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
c180: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
c190: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
c1a0: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
c1b0: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
c1c0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
c1d0: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
c1e0: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
c1f0: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
c200: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
c210: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
c220: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
c230: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
c240: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
c250: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
c260: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
c270: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
c280: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
c290: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
c2a0: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
c2b0: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
c2c0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
c2d0: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
c2e0: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
c2f0: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
c300: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
c310: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
c320: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
c330: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
c340: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
c350: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
c360: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
c370: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
c380: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
c390: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
c3a0: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
c3b0: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
c3c0: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
c3d0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
c3e0: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
c3f0: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
c400: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
c410: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
c420: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
c430: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
c440: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
c450: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
c460: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
c470: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
c480: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
c490: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
c4a0: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
c4b0: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
c4c0: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
c4d0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
c4e0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
c4f0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
c500: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
c510: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
c520: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
c530: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
c540: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
c550: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
c560: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
c570: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
c580: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
c590: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
c5a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
c5b0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
c5c0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
c5d0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
c5e0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
c5f0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
c600: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
c610: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
c620: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
c630: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
c640: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
c650: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
c660: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
c670: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
c680: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
c690: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
c6a0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
c6b0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
c6c0: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
c6d0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
c6e0: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
c6f0: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
c700: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
c710: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
c720: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
c730: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
c740: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
c750: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
c760: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
c770: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
c780: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
c790: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
c7a0: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
c7b0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
c7c0: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
c7d0: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
c7e0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
c7f0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
c800: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
c810: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c820: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c830: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
c840: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
c850: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
c860: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
c870: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
c880: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
c890: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
c8a0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
c8b0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
c8c0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
c8d0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
c8e0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
c8f0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
c900: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
c910: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
c920: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
c930: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
c940: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
c950: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f  l,#zName,0,0}../
c960: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
c970: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
c980: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
c990: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
c9a0: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
c9b0: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
c9c0: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
c9d0: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
c9e0: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
c9f0: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
ca00: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
ca10: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
ca20: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
ca30: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
ca40: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
ca50: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
ca60: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
ca70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca80: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
ca90: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
caa0: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
cab0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
cac0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
cad0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
cae0: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
caf0: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
cb00: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
cb10: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
cb20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
cb30: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
cb40: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
cb50: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
cb60: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
cb70: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
cb80: 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
cb90: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
cba0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
cbb0: 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
cbc0: 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
cbd0: 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
cbe0: 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
cbf0: 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
cc00: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
cc10: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
cc20: 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
cc30: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
cc40: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
cc50: 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
cc60: 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
cc70: 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
cc80: 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
cc90: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
cca0: 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
ccb0: 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
ccc0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
ccd0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
cce0: 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
ccf0: 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
cd00: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
cd10: 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
cd20: 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
cd30: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
cd40: 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
cd50: 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
cd60: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
cd70: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
cd80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
cd90: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
cda0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
cdb0: 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdd0: 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
cde0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
cdf0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
ce00: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
ce10: 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
ce20: 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
ce30: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
ce40: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
ce50: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
ce60: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
ce70: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
ce80: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
ce90: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
cea0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
ceb0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
cec0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
ced0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
cee0: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
cef0: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
cf00: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
cf10: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
cf20: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
cf30: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
cf40: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
cf50: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
cf60: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
cf70: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
cf80: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
cf90: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
cfa0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
cfb0: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
cfc0: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
cfd0: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
cfe0: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
cff0: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
d000: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
d010: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
d020: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
d030: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
d040: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
d050: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
d060: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
d070: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
d080: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
d090: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
d0a0: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
d0b0: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
d0c0: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
d0d0: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
d0e0: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
d0f0: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
d100: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
d110: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
d120: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
d130: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
d140: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
d150: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
d160: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
d170: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
d180: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
d190: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
d1a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
d1b0: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
d1c0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
d1d0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
d1e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
d1f0: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
d200: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
d210: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
d220: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
d230: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
d240: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
d250: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
d260: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
d270: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
d280: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
d290: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
d2a0: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
d2b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
d2c0: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
d2d0: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
d2e0: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
d2f0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
d300: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
d310: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
d320: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
d330: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d340: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
d350: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
d360: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
d370: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
d380: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
d390: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
d3a0: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
d3b0: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
d3c0: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
d3d0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
d3e0: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
d3f0: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
d400: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
d410: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
d420: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
d430: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
d440: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
d450: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
d460: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
d470: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
d480: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
d490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d4a0: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
d4b0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
d4c0: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
d4d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
d4e0: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
d4f0: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
d500: 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a  g order */../*.*
d510: 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
d520: 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
d530: 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
d540: 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
d550: 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
d560: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
d570: 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
d580: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
d590: 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
d5a0: 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
d5b0: 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
d5c0: 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
d5d0: 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
d5e0: 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
d5f0: 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a  utively.  .**.**
d600: 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
d610: 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
d620: 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
d630: 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61 79  h 'a'.  That way
d640: 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
d650: 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
d660: 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
d670: 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
d680: 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
d690: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
d6a0: 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
d6b0: 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
d6c0: 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
d6d0: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
d6e0: 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
d6f0: 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
d700: 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
d710: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
d720: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
d730: 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ison..*/.#define
d740: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
d750: 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65       'a'.#define
d760: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
d770: 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65       'b'.#define
d780: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
d790: 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65  RIC  'c'.#define
d7a0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
d7b0: 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65  GER  'd'.#define
d7c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
d7d0: 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e       'e'..#defin
d7e0: 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
d7f0: 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
d800: 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
d810: 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
d820: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
d830: 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
d840: 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
d850: 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
d860: 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
d870: 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e. .*/.#define S
d880: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
d890: 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x67../*.** A
d8a0: 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
d8b0: 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
d8c0: 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
d8d0: 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
d8e0: 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
d8f0: 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
d900: 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
d910: 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
d920: 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
d930: 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
d940: 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
d950: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
d960: 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
d970: 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
d980: 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
d990: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
d9a0: 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
d9b0: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
d9c0: 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
d9d0: 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
d9e0: 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
d9f0: 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
da00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
da10: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
da20: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
da30: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
da40: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
da50: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
da60: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
da70: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
da80: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
da90: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
daa0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
dab0: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
dac0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
dad0: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
dae0: 20 20 20 20 30 78 38 38 20 20 2f 2a 20 41 73 73      0x88  /* Ass
daf0: 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
db00: 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
db10: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
db20: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
db30: 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
db40: 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
db50: 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
db60: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
db70: 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  chema. .**.** If
db80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
db90: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
dba0: 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
dbb0: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
dbc0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
dbd0: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
dbe0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
dbf0: 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
dc00: 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
dc10: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
dc20: 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
dc30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
dc40: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
dc50: 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
dc60: 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
dc70: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
dc80: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
dc90: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
dca0: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
dcb0: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
dcc0: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
dcd0: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
dce0: 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61  tween .** databa
dcf0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
dd00: 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
dd10: 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
dd20: 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ory database .**
dd30: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
dd40: 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
dd50: 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
dd60: 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
dd70: 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
dd80: 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
dd90: 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
dda0: 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
ddb0: 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
ddc0: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
ddd0: 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
dde0: 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
ddf0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
de00: 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20   may.** then be 
de10: 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74  used by the virt
de20: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
de30: 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65  entation to acce
de40: 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a  ss real tables .
de50: 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
de60: 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
de70: 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
de80: 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
de90: 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  rs .** transacti
dea0: 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
deb0: 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
dec0: 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
ded0: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e  database .** con
dee0: 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
def0: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
df00: 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
df10: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
df20: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
df30: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
df40: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
df50: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
df60: 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
df70: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
df80: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
df90: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
dfa0: 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
dfb0: 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
dfc0: 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
dfd0: 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
dfe0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
dff0: 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
e000: 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
e010: 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
e020: 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
e030: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
e040: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
e050: 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
e060: 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
e070: 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
e080: 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
e090: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e0a0: 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
e0b0: 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
e0c0: 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
e0d0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
e0e0: 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
e0f0: 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
e100: 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
e110: 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
e120: 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
e130: 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
e140: 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
e150: 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
e160: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
e170: 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
e180: 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20  cts are not .** 
e190: 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
e1a0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e1b0: 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44  ndles are not xD
e1c0: 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a  isconnect()ed .*
e1d0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
e1e0: 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
e1f0: 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
e200: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
e210: 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
e220: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
e230: 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
e240: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
e250: 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
e260: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
e270: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
e280: 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
e290: 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
e2a0: 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69  cted .** next ti
e2b0: 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
e2c0: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
e2d0: 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
e2e0: 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
e2f0: 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
e300: 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
e310: 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
e320: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
e330: 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
e340: 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
e350: 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
e360: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
e370: 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
e380: 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
e390: 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
e3a0: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
e3b0: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
e3c0: 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
e3d0: 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
e3e0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
e3f0: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
e400: 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
e410: 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
e420: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
e430: 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
e440: 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44   by .** sqlite3D
e450: 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
e460: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
e470: 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
e480: 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a   VTable.db as .*
e490: 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
e4a0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
e4b0: 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
e4c0: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
e4d0: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
e4e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
e4f0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
e500: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
e510: 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
e520: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
e530: 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
e540: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
e550: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
e560: 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
e570: 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
e580: 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
e590: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
e5a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e5b0: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
e5c0: 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
e5d0: 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
e5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
e5f0: 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
e600: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
e610: 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
e620: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
e630: 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
e640: 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
e650: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
e660: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
e670: 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
e680: 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
e690: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
e6a0: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  ch SQL table is 
e6b0: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
e6c0: 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74  emory by an inst
e6d0: 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66  ance of the.** f
e6e0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
e6f0: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  re..**.** Table.
e700: 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  zName is the nam
e710: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  e of the table. 
e720: 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65   The case of the
e730: 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45   original.** CRE
e740: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
e750: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62  ent is stored, b
e760: 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73  ut case is not s
e770: 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a  ignificant for.*
e780: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a  * comparisons..*
e790: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20  *.** Table.nCol 
e7a0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
e7b0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
e7c0: 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61   table.  Table.a
e7d0: 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  Col is a.** poin
e7e0: 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20  ter to an array 
e7f0: 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74  of Column struct
e800: 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61  ures, one for ea
e810: 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  ch column..**.**
e820: 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61   If the table ha
e830: 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  s an INTEGER PRI
e840: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54  MARY KEY, then T
e850: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68  able.iPKey is th
e860: 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68  e index of.** th
e870: 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73  e column that is
e880: 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68   that key.   Oth
e890: 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b  erwise Table.iPK
e8a0: 65 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20  ey is negative. 
e8b0: 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68   Note.** that th
e8c0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
e8d0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75  e PRIMARY KEY mu
e8e0: 73 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f  st be INTEGER fo
e8f0: 72 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a  r this field to.
e900: 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49  ** be set.  An I
e910: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e920: 45 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68  EY is used as th
e930: 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e rowid for each
e940: 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74   row of.** the t
e950: 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c  able.  If a tabl
e960: 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52  e has no INTEGER
e970: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
e980: 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69  en a random rowi
e990: 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65  d.** is generate
e9a0: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
e9b0: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46  f the table.  TF
e9c0: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69  _HasPrimaryKey i
e9d0: 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20  s set if.** the 
e9e0: 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52  table has any PR
e9f0: 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47  IMARY KEY, INTEG
ea00: 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e  ER or otherwise.
ea10: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75  .**.** Table.tnu
ea20: 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  m is the page nu
ea30: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f  mber for the roo
ea40: 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20  t BTree page of 
ea50: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  the table in the
ea60: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
ea70: 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62  e.  If Table.iDb
ea80: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
ea90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
eaa0: 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69  ble backend.** i
eab0: 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20  n sqlite.aDb[]. 
eac0: 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61   0 is for the ma
ead0: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
eae0: 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c  1 is for the fil
eaf0: 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20  e that.** holds 
eb00: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
eb10: 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49   and indices.  I
eb20: 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69  f TF_Ephemeral i
eb30: 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68  s set.** then th
eb40: 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65  e table is store
eb50: 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74  d in a file that
eb60: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
eb70: 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65  y deleted.** whe
eb80: 6e 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f  n the VDBE curso
eb90: 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69  r to the table i
eba0: 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68  s closed.  In th
ebb0: 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e  is case Table.tn
ebc0: 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44  um .** refers VD
ebd0: 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
ebe0: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
ebf0: 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20  table open, not 
ec00: 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70  to the root.** p
ec10: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61  age number.  Tra
ec20: 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72  nsient tables ar
ec30: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
ec40: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a  he results of a.
ec50: 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61  ** sub-query tha
ec60: 74 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61  t appears instea
ec70: 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  d of a real tabl
ec80: 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52  e name in the FR
ec90: 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66  OM clause .** of
eca0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
ecb0: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ent..*/.struct T
ecc0: 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
ecd0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
ece0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
ecf0: 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
ed00: 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
ed10: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
ed20: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
ed30: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
ed40: 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
ed50: 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
ed60: 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
ed70: 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
ed80: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
ed90: 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
eda0: 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
edb0: 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
edc0: 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
edd0: 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
ede0: 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
edf0: 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
ee00: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
ee10: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
ee20: 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
ee30: 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
ee40: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
ee50: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e  h column */.#ifn
ee60: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ee70: 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74  CHECK.  ExprList
ee80: 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
ee90: 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
eea0: 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  aints */.#endif.
eeb0: 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
eec0: 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
eed0: 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
eee0: 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
eef0: 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
ef00: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
ef10: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
ef20: 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69  ree node for thi
ef30: 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74  s table (see not
ef40: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31  e above) */.  i1
ef50: 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  6 iPKey;        
ef60: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
ef70: 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
ef80: 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72  iPKey] as the pr
ef90: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69  imary key */.  i
efa0: 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
efb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
efc0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
efd0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20   table */.  u16 
efe0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
eff0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
f000: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
f010: 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
f020: 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
f030: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
f040: 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
f050: 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
f060: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
f070: 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
f080: 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
f090: 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
f0a0: 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
f0b0: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
f0c0: 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c  endif.  u8 tabFl
f0d0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
f0e0: 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
f0f0: 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
f100: 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
f110: 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
f120: 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
f130: 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
f140: 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
f150: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
f160: 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
f170: 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
f180: 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
f190: 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
f1a0: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
f1b0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
f1c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
f1d0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
f1e0: 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
f1f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
f200: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
f210: 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
f220: 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
f230: 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20   /* Text of all 
f240: 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d  module args. [0]
f250: 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20   is module name 
f260: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
f270: 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
f280: 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
f290: 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
f2a0: 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
f2b0: 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
f2c0: 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
f2d0: 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
f2e0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
f2f0: 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
f300: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
f310: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
f320: 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
f330: 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
f340: 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
f350: 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
f360: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
f370: 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
f380: 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  bFlags..*/.#defi
f390: 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
f3a0: 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
f3b0: 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
f3c0: 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
f3d0: 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
f3e0: 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
f3f0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
f400: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
f410: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
f420: 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
f430: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
f440: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
f450: 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
f460: 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
f470: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
f480: 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
f490: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
f4a0: 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
f4b0: 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
f4c0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
f4d0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
f4e0: 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
f4f0: 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
f500: 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b   used. PRIMARY K
f510: 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
f520: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  .../*.** Test to
f530: 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
f540: 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
f550: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
f560: 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
f570: 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
f580: 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
f590: 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
f5a0: 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
f5b0: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
f5c0: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
f5d0: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
f5e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
f5f0: 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
f600: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
f610: 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62        (((X)->tab
f620: 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75  Flags & TF_Virtu
f630: 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  al)!=0).#  defin
f640: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
f650: 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c  (X) (((X)->colFl
f660: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
f670: 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a  DDEN)!=0).#else.
f680: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
f690: 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20  ual(X)      0.# 
f6a0: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
f6b0: 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
f6c0: 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  if../* Does the 
f6d0: 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
f6e0: 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
f6f0: 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
f700: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
f710: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
f720: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
f730: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
f740: 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
f750: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
f760: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
f770: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
f780: 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
f790: 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
f7a0: 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
f7b0: 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
f7c0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
f7d0: 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
f7e0: 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
f7f0: 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
f800: 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
f810: 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
f820: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
f830: 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
f840: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
f850: 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
f860: 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
f870: 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
f880: 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
f890: 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
f8a0: 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
f8b0: 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
f8c0: 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
f8d0: 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
f8e0: 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
f8f0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
f900: 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
f910: 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
f920: 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
f930: 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
f940: 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
f950: 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
f960: 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
f970: 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
f980: 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
f990: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
f9a0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
f9b0: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
f9c0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
f9d0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
f9e0: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
f9f0: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
fa00: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
fa10: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
fa20: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
fa30: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
fa40: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
fa50: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
fa60: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
fa70: 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
fa80: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
fa90: 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
faa0: 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
fab0: 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
fac0: 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
fad0: 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
fae0: 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
faf0: 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
fb00: 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
fb10: 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
fb20: 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
fb30: 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
fb40: 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
fb50: 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
fb60: 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
fb70: 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
fb80: 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
fb90: 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
fba0: 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
fbb0: 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
fbc0: 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
fbd0: 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
fbe0: 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
fbf0: 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
fc00: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
fc10: 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
fc20: 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
fc30: 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
fc40: 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
fc50: 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
fc60: 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
fc70: 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
fc80: 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
fc90: 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
fca0: 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
fcb0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
fcc0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
fcd0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
fce0: 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
fcf0: 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
fd00: 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
fd10: 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
fd20: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
fd30: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
fd40: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
fd50: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
fd60: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
fd70: 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
fd80: 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
fd90: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
fda0: 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
fdb0: 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
fdc0: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
fdd0: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
fde0: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
fdf0: 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
fe00: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
fe10: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
fe20: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
fe30: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
fe40: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
fe50: 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
fe60: 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
fe70: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
fe80: 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
fe90: 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
fea0: 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
feb0: 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
fed0: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
fee0: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
fef0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
ff00: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
ff10: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
ff20: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
ff30: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
ff40: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
ff50: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
ff60: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
ff70: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
ff80: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
ff90: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
ffa0: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
ffb0: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
ffc0: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
ffd0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
ffe0: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
fff0: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
10000 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
10010 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
10020 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
10030 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
10040 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
10050 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
10060 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
10070 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
10080 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
10090 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
100a0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
100b0 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
100c0 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
100d0 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
100e0 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
100f0 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
10100 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
10110 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
10120 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
10130 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
10140 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
10150 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
10160 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
10170 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
10180 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
10190 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
101a0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
101b0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
101c0 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
101d0 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
101e0 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
101f0 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
10200 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
10210 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10220 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
10230 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
10240 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
10250 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
10260 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
10270 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
10280 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
10290 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
102a0 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
102b0 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
102c0 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
102d0 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
102e0 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
102f0 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
10300 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
10310 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
10320 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
10330 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
10340 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
10350 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
10360 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
10370 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
10380 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
10390 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
103a0 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
103b0 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
103c0 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
103d0 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
103e0 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
103f0 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
10400 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
10410 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
10420 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
10430 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
10440 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
10450 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
10460 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
10470 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
10480 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
10490 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
104a0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
104b0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
104c0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
104d0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
104e0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
104f0 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
10500 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
10510 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
10520 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
10530 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
10540 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
10550 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
10560 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
10570 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
10580 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
10590 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
105a0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
105b0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
105c0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
105d0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
105e0 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
105f0 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
10600 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
10610 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
10620 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
10630 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
10640 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
10650 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
10660 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
10670 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
10680 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
10690 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
106a0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
106b0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
106c0 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
106d0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
106e0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
106f0 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
10700 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
10710 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
10720 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
10730 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
10740 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
10750 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
10760 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
10770 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
10780 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
10790 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
107a0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
107b0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
107c0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
107d0 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
107e0 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
107f0 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
10800 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
10810 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
10820 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
10830 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
10840 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
10850 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
10860 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
10870 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
10880 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
10890 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
108a0 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
108b0 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
108c0 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
108d0 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
108e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
108f0 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
10900 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
10910 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
10920 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
10930 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
10940 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
10950 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
10960 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
10970 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
10980 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
10990 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
109a0 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69  ex */.  u16 nXFi
109b0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
109c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
109d0 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20   beyond the key 
109e0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c  columns */.  sql
109f0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
10a00 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
10a10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
10a20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
10a30 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
10a40 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
10a50 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
10a60 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
10a70 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
10a80 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
10a90 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
10aa0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
10ab0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
10ac0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
10ad0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
10ae0 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e  n about a.** sin
10af0 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  gle index record
10b00 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
10b10 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  y been parsed ou
10b20 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
10b30 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  l.** values..**.
10b40 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
10b50 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
10b60 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
10b70 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
10b80 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
10b90 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
10ba0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
10bb0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
10bc0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
10bd0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
10be0 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
10bf0 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
10c00 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
10c10 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
10c20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
10c30 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
10c40 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
10c50 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
10c60 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  e..**.** This st
10c70 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20  ructure holds a 
10c80 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
10c90 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73  already been dis
10ca0 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74  assembled.** int
10cb0 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e  o its constituen
10cc0 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
10cd0 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65  The r1 and r2 me
10ce0 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 61  mber variables a
10cf0 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20  re only used by 
10d00 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f  the optimized co
10d10 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63  mparison.** func
10d20 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64  tions vdbeRecord
10d30 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64  CompareInt() and
10d40 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
10d50 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73  reString()..*/.s
10d60 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
10d70 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
10d80 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
10d90 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
10da0 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
10db0 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46  tion */.  u16 nF
10dc0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
10dd0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
10de0 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f  es in apMem[] */
10df0 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63  .  i8 default_rc
10e00 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72  ;      /* Compar
10e10 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b  ison result if k
10e20 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  eys are equal */
10e30 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20  .  u8 errCode;  
10e40 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
10e50 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63  detected by xRec
10e60 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52  ordCompare (CORR
10e70 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f  UPT or NOMEM) */
10e80 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
10e90 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
10ea0 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20   */.  int r1;   
10eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
10ec0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
10ed0 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
10ee0 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20   int r2;        
10ef0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
10f00 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20   return if (rhs 
10f10 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  < lhs) */.};.../
10f20 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
10f30 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
10f40 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
10f50 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
10f60 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10f70 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
10f80 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
10f90 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
10fa0 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
10fb0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
10fc0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
10fd0 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
10fe0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
10ff0 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
11000 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
11010 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
11020 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
11030 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
11040 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
11050 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
11060 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
11070 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
11080 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
11090 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
110a0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
110b0 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
110c0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
110d0 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
110e0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
110f0 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
11100 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
11110 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
11120 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
11130 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
11140 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
11150 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
11160 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
11170 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
11180 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
11190 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
111a0 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
111b0 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
111c0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
111d0 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
111e0 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
111f0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
11200 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
11210 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
11220 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
11230 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
11240 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
11250 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
11260 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
11270 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
11280 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
11290 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
112a0 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
112b0 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
112c0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
112d0 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
112e0 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
112f0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
11300 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
11310 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
11320 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
11330 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
11340 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
11350 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
11360 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
11370 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
11380 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
11390 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
113a0 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
113b0 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
113c0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
113d0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
113f0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
11400 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
11410 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
11420 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
11430 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
11440 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
11450 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
11460 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
11470 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
11480 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
11490 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
114a0 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
114b0 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
114c0 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
114d0 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
114e0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
114f0 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
11500 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
11510 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
11520 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
11530 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
11540 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11550 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
11560 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
11570 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
11580 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
11590 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
115a0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
115b0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
115c0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
115d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
115e0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
115f0 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
11600 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
11610 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
11620 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
11630 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
11640 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
11650 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
11660 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
11670 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
11680 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
11690 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e 66 6f  ces */.  KeyInfo
116a0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20 20 20   *pKeyInfo;     
116b0 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f 20 6f    /* A KeyInfo o
116c0 62 6a 65 63 74 20 73 75 69 74 61 62 6c 65 20 66  bject suitable f
116d0 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  or this index */
116e0 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
116f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
11700 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
11710 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
11720 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
11730 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
11740 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11750 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
11760 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
11770 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
11780 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11790 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
117a0 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
117b0 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
117c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
117d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
117e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
117f0 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
11800 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
11810 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
11820 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
11830 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
11840 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
11850 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
11860 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
11870 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
11880 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
11890 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
118a0 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
118b0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
118c0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
118d0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
118e0 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
118f0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
11900 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
11910 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
11920 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
11930 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
11940 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
11950 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
11960 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
11970 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
11980 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
11990 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
119a0 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
119b0 65 78 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ex */.#ifdef SQL
119c0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
119d0 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
119e0 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
119f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11a00 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
11a10 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
11a20 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
11a30 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
11a40 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
11a50 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
11a60 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
11a70 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
11a80 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
11a90 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
11aa0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
11ab0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
11ac0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
11ad0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
11ae0 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69  ost key */.#endi
11af0 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
11b00 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
11b10 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
11b20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
11b30 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
11b40 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
11b50 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
11b60 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
11b70 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
11b80 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
11b90 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
11ba0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
11bb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11bc0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
11bd0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
11be0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
11bf0 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
11c00 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
11c10 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
11c20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
11c30 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
11c40 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
11c50 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
11c60 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
11c70 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
11c80 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
11c90 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
11ca0 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
11cb0 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
11cc0 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
11cd0 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
11ce0 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  one)../*.** Each
11cf0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
11d00 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
11d10 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
11d20 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
11d30 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  y .** using a st
11d40 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
11d50 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
11d60 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
11d70 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
11d80 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
11d90 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
11da0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
11db0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
11dc0 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
11dd0 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
11de0 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
11df0 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
11e00 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
11e10 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
11e20 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
11e30 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
11e40 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
11e50 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
11e60 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
11e70 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
11e80 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
11e90 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
11ea0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
11eb0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
11ec0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
11ed0 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
11ee0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
11ef0 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
11f00 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
11f10 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
11f20 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
11f30 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
11f40 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
11f50 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
11f60 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
11f70 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
11f80 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
11f90 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
11fa0 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
11fb0 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
11fc0 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
11fd0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
11fe0 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
11ff0 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
12000 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
12010 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
12020 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
12030 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
12040 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
12050 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
12060 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
12070 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
12080 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
12090 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
120a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
120b0 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
120c0 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
120d0 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
120e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
120f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
12100 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
12110 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
12120 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
12130 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
12140 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
12150 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
12160 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
12170 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
12180 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
12190 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
121a0 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
121b0 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
121c0 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
121d0 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
121e0 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
121f0 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
12200 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
12210 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
12220 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
12230 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
12240 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
12250 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
12260 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
12270 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
12280 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
12290 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
122a0 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
122b0 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
122c0 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
122d0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
122e0 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
122f0 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
12300 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
12310 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
12320 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
12330 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
12340 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
12350 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
12360 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
12370 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
12380 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
12390 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123b0 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
123c0 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
123d0 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
123e0 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
123f0 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
12400 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
12410 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
12420 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12430 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
12460 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
12470 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
12480 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
12490 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
124a0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
124b0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
124c0 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
124d0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
124e0 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
124f0 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
12500 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
12510 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
12520 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12530 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  ex */.  int mnRe
12540 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20  g, mxReg;       
12550 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69  /* Range of regi
12560 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
12570 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75  for aCol and aFu
12580 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  nc */.  ExprList
12590 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
125a0 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
125b0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
125c0 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
125d0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
125e0 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
125f0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
12600 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12620 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
12630 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12650 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
12660 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
12670 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
12680 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
12690 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
126a0 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
126b0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
126c0 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
126d0 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
126e0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
126f0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12700 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
12710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12720 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
12730 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
12740 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
12750 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12770 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
12780 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
12790 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
127a0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
127b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
127c0 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
127d0 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
127e0 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
127f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12800 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
12810 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
12820 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12840 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
12850 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
12860 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
12870 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
128a0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
128b0 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
128c0 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
128d0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
128e0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
128f0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
12900 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
12910 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
12920 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
12930 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
12940 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
12950 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12960 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12970 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
129a0 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
129b0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
129c0 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
129d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
129e0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
129f0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
12a00 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
12a10 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
12a20 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
12a30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
12a40 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
12a50 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
12a60 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
12a70 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
12a80 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
12a90 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
12aa0 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
12ab0 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
12ac0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
12ad0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
12ae0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
12af0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
12b00 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
12b10 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
12b20 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
12b30 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
12b40 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
12b50 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
12b60 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
12b70 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
12b80 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
12b90 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
12ba0 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
12bb0 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
12bc0 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
12bd0 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
12be0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
12bf0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
12c00 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
12c10 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
12c20 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
12c30 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
12c40 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
12c50 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
12c60 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
12c70 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
12c80 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
12c90 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
12ca0 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
12cb0 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
12cc0 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
12cd0 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
12ce0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
12cf0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
12d00 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
12d10 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
12d20 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
12d30 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
12d40 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
12d50 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
12d60 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
12d70 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
12d80 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
12d90 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
12da0 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
12db0 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
12dc0 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
12dd0 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
12de0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
12df0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
12e00 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
12e10 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
12e20 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
12e30 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
12e40 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
12e50 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
12e60 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
12e70 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
12e80 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
12e90 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
12ea0 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
12eb0 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
12ec0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
12ed0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
12ee0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
12ef0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
12f00 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
12f10 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
12f20 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
12f30 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
12f40 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
12f50 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
12f60 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
12f70 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
12f80 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
12f90 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
12fa0 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
12fb0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
12fc0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
12fd0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
12fe0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
12ff0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
13000 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
13010 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
13020 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
13030 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
13040 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
13050 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
13060 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
13070 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
13080 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
13090 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
130a0 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
130b0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
130c0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
130d0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
130e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
130f0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
13100 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
13110 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
13120 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
13130 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
13140 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
13150 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
13160 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
13170 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
13180 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
13190 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
131a0 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
131b0 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
131c0 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
131d0 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
131e0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
131f0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
13200 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
13210 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
13220 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
13230 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
13240 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
13250 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
13260 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
13270 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
13280 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
13290 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
132a0 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
132b0 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
132c0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
132d0 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
132e0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
132f0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
13300 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
13310 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
13320 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
13330 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
13340 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
13350 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
13360 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
13370 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
13380 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
13390 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
133a0 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
133b0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
133c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
133d0 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
133e0 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
133f0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
13400 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
13410 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
13420 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
13430 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
13440 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
13450 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
13460 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
13470 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13480 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
13490 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
134a0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
134b0 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
134c0 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
134d0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
134e0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
134f0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
13500 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
13510 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
13520 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
13530 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
13540 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
13550 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
13560 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
13570 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
13580 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
13590 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
135a0 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
135b0 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
135c0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
135d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
135e0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
135f0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
13600 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
13610 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
13620 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
13630 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
13640 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
13650 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
13660 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
13670 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
13680 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
13690 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
136a0 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
136b0 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
136c0 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
136d0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
136e0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
136f0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
13700 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
13710 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
13720 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
13730 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
13740 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
13750 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
13760 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
13770 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
13780 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
13790 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
137a0 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
137b0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
137c0 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
137d0 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
137e0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
137f0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
13800 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
13810 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
13820 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
13830 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
13840 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
13850 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
13860 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
13870 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
13880 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
13890 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
138a0 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
138b0 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
138c0 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
138d0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
138e0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
138f0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
13900 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
13910 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
13920 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
13930 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
13940 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
13950 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
13960 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
13970 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
13980 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139a0 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
139b0 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
139c0 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
139d0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
139e0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
139f0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
13a00 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
13a10 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
13a20 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
13a30 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
13a40 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
13a50 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
13a60 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
13a70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
13a80 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
13a90 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
13aa0 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
13ab0 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
13ac0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
13ad0 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
13ae0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
13af0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
13b00 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
13b10 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
13b20 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
13b30 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
13b40 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
13b50 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
13b60 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
13b70 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
13b80 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
13b90 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
13ba0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
13bb0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
13bc0 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
13bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
13c10 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
13c20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
13c30 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
13c40 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
13c50 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
13c60 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
13c70 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
13c80 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
13c90 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
13ca0 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
13cb0 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
13cc0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
13cd0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
13ce0 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
13cf0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
13d00 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
13d10 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
13d20 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
13d30 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
13d40 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
13d50 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
13d60 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
13d70 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
13d80 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
13d90 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
13da0 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
13db0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
13dc0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
13dd0 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
13de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
13e20 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
13e30 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
13e40 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
13e50 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
13e60 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
13e70 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
13e80 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
13e90 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
13ea0 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
13eb0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
13ec0 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
13ed0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13ef0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
13f00 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
13f30 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
13f40 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
13f70 79 3a 20 20 31 30 30 30 20 74 69 6d 65 73 20 6c  y:  1000 times l
13f80 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79  ikelihood */.  y
13f90 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
13fa0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
13fb0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
13fc0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
13fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13fe0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
13ff0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
14000 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
14010 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31  s >= 1). */.  i1
14020 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
14030 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
14040 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
14050 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
14060 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
14070 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
14080 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
14090 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
140a0 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
140b0 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
140c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
140d0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
140e0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
140f0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14110 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
14120 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
14130 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
14160 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
14170 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
14180 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
14190 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
141a0 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
141b0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
141c0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
141d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
141e0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
141f0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
14200 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
14210 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
14220 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
14230 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
14240 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
14250 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
14260 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
14270 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e  Originated in ON
14280 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
14290 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64   of a join */.#d
142a0 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
142b0 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43     0x000002 /* C
142c0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
142d0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
142e0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
142f0 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20  ne EP_Resolved  
14300 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20  0x000004 /* IDs 
14310 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
14320 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f  ed to COLUMNs */
14330 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f  .#define EP_Erro
14340 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f  r     0x000008 /
14350 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e  * Expression con
14360 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
14370 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  e errors */.#def
14380 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20  ine EP_Distinct 
14390 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67   0x000010 /* Agg
143a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
143b0 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65  with DISTINCT ke
143c0 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
143d0 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78   EP_VarSelect 0x
143e0 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63  000020 /* pSelec
143f0 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
14400 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
14410 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
14420 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f  uoted 0x000040 /
14430 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
14440 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
14450 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
14460 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30  InfixFunc 0x0000
14470 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  80 /* True for a
14480 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
14490 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
144a0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
144b0 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31  Collate   0x0001
144c0 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
144d0 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
144e0 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
144f0 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20  fine EP_Generic 
14500 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67    0x000200 /* Ig
14510 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20  nore COLLATE or 
14520 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73  affinity on this
14530 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65   tree */.#define
14540 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78   EP_IntValue  0x
14550 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65  000400 /* Intege
14560 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
14570 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
14580 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
14590 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f  elect 0x000800 /
145a0 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
145b0 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
145c0 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
145d0 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20  define EP_Skip  
145e0 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20      0x001000 /* 
145f0 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20  COLLATE, AS, or 
14600 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66  UNLIKELY */.#def
14610 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
14620 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70   0x002000 /* Exp
14630 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45  r struct EXPR_RE
14640 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
14650 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
14660 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30  EP_TokenOnly 0x0
14670 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  04000 /* Expr st
14680 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  ruct EXPR_TOKENO
14690 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  NLYSIZE bytes on
146a0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
146b0 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38  _Static    0x008
146c0 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d  000 /* Held in m
146d0 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e  emory not obtain
146e0 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
146f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d   */.#define EP_M
14700 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30  emToken  0x01000
14710 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c  0 /* Need to sql
14720 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
14730 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
14740 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20  ine EP_NoReduce 
14750 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e   0x020000 /* Can
14760 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
14770 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
14780 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b  #define EP_Unlik
14790 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a  ely  0x040000 /*
147a0 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c   unlikely() or l
147b0 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63  ikelihood() func
147c0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
147d0 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78 30  EP_Constant  0x0
147e0 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73  80000 /* Node is
147f0 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a   a constant */..
14800 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
14810 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
14820 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
14830 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
14840 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  e .** Expr.flags
14850 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
14860 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
14870 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
14880 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
14890 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
148a0 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
148b0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
148c0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
148d0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
148e0 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
148f0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
14900 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
14910 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
14920 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
14930 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
14940 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
14950 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
14960 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
14970 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
14980 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
14990 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
149a0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
149b0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
149c0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
149d0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
149e0 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
149f0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
14a00 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
14a10 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
14a20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
14a30 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
14a40 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
14a50 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
14a60 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
14a70 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
14a80 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
14a90 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
14aa0 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75  al Expr .** stru
14ab0 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
14ac0 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
14ad0 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
14ae0 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a  in Expr.flags .*
14af0 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
14b00 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
14b10 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
14b20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
14b30 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
14b40 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
14b50 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
14b60 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
14b70 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
14b80 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
14b90 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
14ba0 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
14bb0 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
14bc0 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
14bd0 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
14be0 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
14bf0 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
14c00 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
14c10 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
14c20 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
14c30 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
14c40 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
14c50 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73  ment .** above s
14c60 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
14c70 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
14c80 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
14c90 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
14ca0 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
14cb0 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
14cc0 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
14cd0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
14ce0 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
14cf0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
14d00 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
14d10 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
14d20 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
14d30 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
14d40 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
14d50 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
14d60 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
14d70 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
14d80 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
14d90 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
14da0 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
14db0 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
14dc0 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
14dd0 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
14de0 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
14df0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
14e00 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
14e10 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
14e20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
14e30 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
14e40 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
14e50 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
14e60 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
14e70 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
14e80 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
14e90 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
14ea0 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
14eb0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
14ec0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
14ed0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
14ee0 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
14ef0 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
14f00 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
14f10 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
14f20 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
14f30 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
14f40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
14f50 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
14f60 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
14f70 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
14f80 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
14f90 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
14fa0 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
14fb0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
14fc0 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
14fd0 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
14fe0 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
14ff0 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
15000 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
15010 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
15020 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
15030 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
15040 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
15050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15060 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
15070 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
15080 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
15090 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
150a0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
150b0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
150c0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
150d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
150e0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
150f0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
15100 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
15110 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
15120 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
15130 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
15140 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
15150 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
15160 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
15170 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
15180 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
15190 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
151a0 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
151b0 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
151c0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
151d0 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
151e0 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
151f0 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
15200 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
15210 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
15220 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
15230 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
15240 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
15250 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
15260 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
15270 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
15280 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
15290 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
152a0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
152b0 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
152c0 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
152d0 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
152e0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
152f0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
15300 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
15310 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
15320 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
15330 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
15340 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
15350 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
15360 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
15370 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
15380 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
15390 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
153a0 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
153b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
153c0 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  oc a power of tw
153d0 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75  o greater or equ
153e0 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d  al to nExpr */.}
153f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
15400 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
15410 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
15420 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
15430 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
15440 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
15450 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
15460 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
15470 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
15480 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
15490 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
154a0 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
154b0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
154c0 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
154d0 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
154e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
154f0 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
15500 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
15510 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
15520 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
15530 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
15540 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
15550 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
15560 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
15570 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
15580 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
15590 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
155a0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
155b0 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
155c0 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
155d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
155e0 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
155f0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
15600 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
15610 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
15620 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
15630 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
15640 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
15650 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
15660 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
15670 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
15680 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
15690 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
156a0 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
156b0 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
156c0 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
156d0 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
156e0 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
156f0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
15700 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
15710 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
15720 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
15730 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
15740 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
15750 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
15760 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
15770 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
15780 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
15790 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
157a0 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
157b0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
157c0 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
157d0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
157e0 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
157f0 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
15800 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
15810 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
15820 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
15830 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
15840 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
15850 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
15860 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
15870 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
15880 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
15890 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
158a0 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
158b0 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
158c0 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
158d0 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
158e0 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
158f0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
15900 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
15910 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
15920 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
15930 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
15940 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
15950 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
15960 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
15970 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69  /.typedef u64 Bi
15980 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  tmask;../*.** Th
15990 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
159a0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
159b0 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
159c0 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
159d0 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
159e0 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
159f0 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
15a00 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
15a10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
15a20 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
15a30 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
15a40 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
15a50 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
15a60 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a  t)1)<<(n))../*.*
15a70 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15a80 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
15a90 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
15aa0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
15ab0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
15ac0 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
15ad0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
15ae0 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
15af0 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
15b00 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
15b10 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
15b20 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
15b30 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
15b40 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
15b50 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15b60 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
15b70 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
15b80 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
15b90 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
15ba0 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
15bb0 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
15bc0 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
15bd0 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
15be0 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
15bf0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
15c00 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
15c10 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
15c20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
15c30 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
15c40 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
15c50 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
15c60 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
15c70 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
15c80 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
15c90 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
15ca0 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
15cb0 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
15cc0 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
15cd0 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
15ce0 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
15cf0 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
15d00 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
15d10 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
15d20 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
15d30 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
15d40 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
15d50 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
15d60 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
15d70 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
15d80 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
15d90 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
15da0 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
15db0 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
15dc0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
15dd0 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
15de0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
15df0 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
15e00 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
15e10 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
15e20 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
15e30 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
15e40 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
15e50 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
15e60 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
15e70 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
15e80 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
15e90 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
15ea0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
15eb0 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
15ec0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
15ed0 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
15ee0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
15ef0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
15f00 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
15f10 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
15f20 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
15f30 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
15f40 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
15f50 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
15f60 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
15f70 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
15f80 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
15f90 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15fa0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
15fb0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
15fc0 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
15fd0 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
15fe0 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
15ff0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
16000 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
16010 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
16020 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
16030 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
16040 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
16050 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
16060 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
16070 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
16080 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
16090 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
160a0 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
160b0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
160c0 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
160d0 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
160e0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
160f0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
16100 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
16110 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
16120 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
16130 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
16140 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
16150 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
16160 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
16170 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  */.    u8 jointy
16180 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
16190 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
161a0 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
161b0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
161c0 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
161d0 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
161e0 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
161f0 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
16200 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e  clause */.    un
16210 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61  signed isCorrela
16220 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65  ted :1;  /* True
16230 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73   if sub-query is
16240 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20   correlated */. 
16250 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
16260 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
16270 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
16280 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
16290 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
162a0 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
162b0 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
162c0 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
162d0 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65  n WITH */.#ifnde
162e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
162f0 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
16300 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
16310 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
16320 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
16330 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
16340 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
16350 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
16360 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
16370 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
16380 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
16390 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
163a0 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
163b0 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
163c0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
163d0 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
163e0 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
163f0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
16400 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
16410 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
16420 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
16430 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
16440 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61   used */.    cha
16450 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f  r *zIndex;     /
16460 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
16470 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
16480 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
16490 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e  /.    Index *pIn
164a0 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78  dex;    /* Index
164b0 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
164c0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64  sponding to zInd
164d0 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ex, if any */.  
164e0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
164f0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
16500 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
16510 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
16520 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
16530 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
16540 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
16550 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
16560 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
16570 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
16580 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
16590 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
165a0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
165b0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
165c0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
165d0 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
165e0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
165f0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
16600 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
16610 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
16620 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
16630 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
16640 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
16650 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
16660 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
16670 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
16680 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
16690 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
166a0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
166b0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
166c0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
166d0 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
166e0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
166f0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
16700 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
16710 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
16720 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
16730 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
16740 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
16750 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
16760 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
16770 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
16780 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
16790 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  member..*/.#defi
167a0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
167b0 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
167c0 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
167d0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
167e0 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
167f0 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
16800 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
16810 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
16820 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
16830 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
16840 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
16850 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
16860 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
16870 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
16880 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
16890 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
168a0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
168b0 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
168c0 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
168d0 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f  S_OK    0x0008 /
168e0 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
168f0 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
16900 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
16910 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43  HERE_OMIT_OPEN_C
16920 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20  LOSE  0x0010 /* 
16930 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72  Table cursors ar
16940 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a  e already open *
16950 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16960 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20  FORCE_TABLE     
16970 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f   0x0020 /* Do no
16980 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f  t use an index-o
16990 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64  nly search */.#d
169a0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54  efine WHERE_ONET
169b0 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30  ABLE_ONLY    0x0
169c0 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65  040 /* Only code
169d0 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69   the 1st table i
169e0 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64  n pTabList */.#d
169f0 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f  efine WHERE_AND_
16a00 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30  ONLY         0x0
16a10 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65  080 /* Don't use
16a20 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20   indices for OR 
16a30 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
16a40 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20   WHERE_GROUPBY  
16a50 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f          0x0100 /
16a60 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65  * pOrderBy is re
16a70 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20  ally a GROUP BY 
16a80 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16a90 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20  _DISTINCTBY     
16aa0 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64    0x0200 /* pOrd
16ab0 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erby is really a
16ac0 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65   DISTINCT clause
16ad0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16ae0 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20  E_WANT_DISTINCT 
16af0 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c     0x0400 /* All
16b00 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f   output needs to
16b10 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a   be distinct */.
16b20 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f  #define WHERE_SO
16b30 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30  RTBYGROUP      0
16b40 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74  x0800 /* Support
16b50 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
16b60 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69  orted() */.#defi
16b70 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f  ne WHERE_REOPEN_
16b80 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30  IDX       0x1000
16b90 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f   /* Try to use O
16ba0 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a  P_ReopenIdx */..
16bb0 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
16bc0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
16bd0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
16be0 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
16bf0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
16c00 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
16c10 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
16c20 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
16c30 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
16c40 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
16c50 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
16c60 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
16c70 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
16c80 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
16c90 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
16ca0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
16cb0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
16cc0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
16cd0 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
16ce0 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
16cf0 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
16d00 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
16d10 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
16d20 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
16d30 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
16d40 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
16d50 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
16d60 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
16d70 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
16d80 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
16d90 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
16da0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
16db0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
16dc0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
16dd0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
16de0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
16df0 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
16e00 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
16e10 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
16e20 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
16e30 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
16e40 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
16e50 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
16e60 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
16e70 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
16e80 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
16e90 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
16ea0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
16eb0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
16ec0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
16ed0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
16ee0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
16ef0 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
16f00 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
16f10 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
16f20 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
16f30 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
16f40 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
16f50 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
16f60 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
16f70 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
16f80 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
16f90 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
16fa0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
16fb0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
16fc0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
16fd0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
16fe0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
16ff0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
17000 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
17010 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
17020 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
17030 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
17040 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
17050 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
17060 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
17070 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
17080 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
17090 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
170a0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
170b0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
170c0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
170d0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
170e0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
170f0 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
17100 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
17110 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
17120 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
17130 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
17140 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
17150 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
17160 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
17170 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
17180 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
17190 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
171a0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
171b0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
171c0 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
171d0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
171e0 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
171f0 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
17200 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e  lumns */.  AggIn
17210 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
17220 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
17230 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
17240 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
17250 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
17260 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
17270 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
17280 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
17290 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
172a0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
172b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
172c0 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
172d0 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
172e0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
172f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17300 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
17310 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
17320 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
17330 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20  .  u8 ncFlags;  
17340 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
17350 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
17360 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
17370 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
17380 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
17390 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74   the NameContext
173a0 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e  , ncFlags field.
173b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
173c0 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20  llowAgg  0x01   
173d0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
173e0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
173f0 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
17400 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20  ine NC_HasAgg   
17410 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20   0x02    /* One 
17420 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
17430 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  e functions seen
17440 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
17450 73 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20  sCheck   0x04   
17460 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
17470 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
17480 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
17490 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
174a0 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20  InAggFunc 0x08  
174b0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
174c0 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
174d0 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
174e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
174f0 72 74 49 64 78 20 20 20 30 78 31 30 20 20 20 20  rtIdx   0x10    
17500 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
17510 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
17520 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f  ndex WHERE */../
17530 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17540 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
17550 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
17560 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
17570 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
17580 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
17590 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
175a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
175b0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
175c0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
175d0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
175e0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
175f0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
17600 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
17610 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
17620 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
17630 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
17640 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
17650 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
17660 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
17670 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
17680 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
17690 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
176a0 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
176b0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
176c0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
176d0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
176e0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
176f0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
17700 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
17710 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
17720 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
17730 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
17740 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
17750 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
17760 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
17770 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
17780 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
17790 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
177a0 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
177b0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
177c0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
177d0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
177e0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
177f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17800 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
17810 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
17820 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
17830 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
17840 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
17850 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
17860 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
17870 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
17880 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
17890 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
178a0 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
178b0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
178c0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
178d0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
178e0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
178f0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
17900 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
17910 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
17920 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
17930 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
17940 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
17950 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
17960 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
17970 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
17980 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
17990 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
179a0 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
179b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
179c0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
179d0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
179e0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
179f0 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
17a00 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
17a10 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
17a20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
17a30 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
17a40 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
17a50 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
17a60 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
17a70 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  unters */.  int 
17a80 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
17a90 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
17aa0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
17ab0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
17ac0 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
17ad0 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
17ae0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
17af0 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
17b00 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
17b10 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
17b20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
17b30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
17b40 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
17b50 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
17b60 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
17b70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
17b80 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
17b90 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
17ba0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
17bb0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
17bc0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
17bd0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
17be0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
17bf0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
17c00 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
17c10 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
17c20 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
17c30 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
17c40 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
17c50 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
17c60 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
17c70 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
17c80 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
17c90 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
17ca0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
17cb0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
17cc0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
17cd0 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
17ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
17cf0 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
17d00 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
17d10 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
17d20 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
17d30 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
17d40 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
17d50 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
17d60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
17d70 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
17d80 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
17d90 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
17da0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
17db0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
17dc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
17dd0 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
17de0 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
17df0 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
17e00 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
17e10 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
17e20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e   0x0002  /* Iden
17e30 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
17e40 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
17e50 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
17e60 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20  te       0x0004 
17e70 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
17e80 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17e90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
17ea0 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
17eb0 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74  x0008  /* Uses t
17ec0 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
17ed0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
17ee0 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
17ef0 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a        0x0010  /*
17f00 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
17f10 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
17f20 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
17f30 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
17f40 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46      0x0020  /* F
17f50 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
17f60 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
17f70 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ta */.          
17f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
17f90 20 30 78 30 30 34 30 20 20 4e 4f 54 20 55 53 45   0x0040  NOT USE
17fa0 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  D */.#define SF_
17fb0 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20  Values          
17fc0 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68  0x0080  /* Synth
17fd0 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
17fe0 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ES clause */.   
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30 20 20   /*     0x0100  
18010 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65 66  NOT USED */.#def
18020 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
18030 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f  m      0x0200  /
18040 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
18050 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
18060 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
18070 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
18080 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e      0x0400  /* N
18090 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
180a0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
180b0 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
180c0 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
180d0 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54      0x0800  /* T
180e0 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
180f0 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
18100 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
18110 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
18120 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 50 61     0x1000  /* Pa
18130 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
18140 20 71 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   query */.../*.*
18150 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
18160 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
18170 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
18180 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
18190 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
181a0 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
181b0 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
181c0 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
181d0 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
181e0 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
181f0 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
18200 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
18210 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
18220 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
18230 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ex .**          
18240 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74             ident
18250 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e  ified by pDest->
18260 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
18270 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20     SRT_Except   
18280 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74     Remove result
18290 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f  s from the tempo
182a0 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74  rary index pDest
182b0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
182c0 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20       SRT_Exists 
182d0 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69       Store a 1 i
182e0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44  n memory cell pD
182f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20  est->iSDParm if 
18300 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20  the result.**   
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70    set is not emp
18330 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ty..**.**     SR
18340 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68  T_Discard     Th
18350 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20  row the results 
18360 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75  away.  This is u
18370 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a  sed by SELECT.**
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
183a0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
183b0 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f  whose only purpo
183c0 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20  se is.**        
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
183e0 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66   side-effects of
183f0 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
18400 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  * All of the abo
18410 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69  ve are free to i
18420 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45  gnore their ORDE
18430 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f  R BY clause. Tho
18440 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f  se that.** follo
18450 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65  w must honor the
18460 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
18470 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18480 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65  Output      Gene
18490 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75  rate a row of ou
184a0 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20  tput (using the 
184b0 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20  OP_ResultRow.** 
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20      opcode) for 
184e0 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
184f0 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a  result set..**.*
18500 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20  *     SRT_Mem   
18510 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64        Only valid
18520 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
18530 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
18540 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  n..**           
18550 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20            Store 
18560 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
18570 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
18580 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20  sult row.**     
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
185b0 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20  t->iSDParm then 
185c0 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74  abandon the rest
185d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
185e0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71          of the q
185f0 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74  uery.  This dest
18600 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20  ination implies 
18610 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a  "LIMIT 1"..**.**
18620 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20       SRT_Set    
18630 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20       The result 
18640 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65  must be a single
18650 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20   column.  Store 
18660 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20  each.**         
18670 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20              row 
18680 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  of result as the
18690 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44   key in table pD
186a0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a  est->iSDParm. .*
186b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
186c0 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
186d0 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
186e0 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
186f0 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18710 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
18720 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
18730 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
18740 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
18750 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
18760 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18770 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
18780 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187a0 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
187b0 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
187c0 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
187d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
187e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
187f0 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
18800 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
18810 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18830 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
18840 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
18850 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
18860 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18870 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
18880 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
18890 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
188a0 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
188b0 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
188c0 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
188d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
188e0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
188f0 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
18900 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
18910 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
18940 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
18950 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
18960 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
18980 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
18990 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
189a0 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
189b0 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
189d0 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
189e0 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
189f0 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
18a00 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
18a10 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
18a20 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
18a30 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
18a40 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
18a50 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
18a60 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
18a70 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
18aa0 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
18ab0 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
18ac0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18ad0 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
18ae0 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
18af0 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
18b00 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18b20 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
18b30 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18b40 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
18b50 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
18b60 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
18b70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
18b80 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18b90 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
18ba0 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
18bb0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18bc0 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
18be0 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
18bf0 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
18c00 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
18c10 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
18c20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
18c30 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
18c40 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
18c50 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
18c60 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
18c70 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
18c80 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
18c90 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
18ca0 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
18cb0 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
18cc0 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
18cd0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
18ce0 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
18cf0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
18d00 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
18d10 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
18d20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
18d30 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
18d40 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
18d50 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
18d60 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18d80 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
18d90 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
18da0 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
18db0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
18dc0 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
18dd0 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
18de0 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
18df0 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
18e00 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
18e10 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
18e20 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
18e30 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
18e40 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
18e50 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
18e60 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
18e70 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
18e80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
18e90 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
18ea0 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
18eb0 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
18ec0 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
18ed0 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
18ee0 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
18ef0 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
18f00 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
18f10 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
18f20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
18f30 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
18f40 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
18f50 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
18f60 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
18f70 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
18f80 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
18f90 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
18fa0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
18fb0 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
18fc0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
18fd0 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
18fe0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
18ff0 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
19000 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
19010 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
19020 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
19030 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
19040 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
19050 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
19060 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
19070 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
19080 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
19090 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
190a0 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
190b0 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
190c0 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
190d0 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
190e0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
190f0 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
19100 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
19110 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
19120 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
19130 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
19140 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
19150 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
19160 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
19170 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
19180 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
19190 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
191a0 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
191b0 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
191c0 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
191d0 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
191e0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
191f0 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
19200 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
19210 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
19220 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
19230 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
19240 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
19250 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
19260 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
19270 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
19280 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
19290 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
192a0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
192b0 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
192c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
192d0 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
192e0 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
192f0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
19300 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  e. */.  char aff
19310 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Sdst;        /* 
19320 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
19330 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
19340 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
19350 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
19360 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
19370 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
19380 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
19390 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
193a0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
193b0 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
193c0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
193d0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
193e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
193f0 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
19400 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
19410 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
19420 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
19430 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
19440 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
19450 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
19460 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
19470 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
19480 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
19490 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
194a0 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74  OINCREMENT .** t
194b0 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
194c0 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
194d0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
194e0 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
194f0 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
19500 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
19510 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
19520 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
19530 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
19540 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
19550 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
19560 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
19570 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
19580 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
19590 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
195a0 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20  nserts are down 
195b0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
195c0 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
195d0 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
195e0 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
195f0 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
19600 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
19610 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
19620 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
19630 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
19640 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
19650 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
19660 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
19670 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
19680 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
19690 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
196a0 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
196b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
196c0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
196d0 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
196e0 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
196f0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
19700 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
19710 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
19720 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
19730 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
19740 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
19750 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
19760 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
19770 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
19780 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f  };../*.** Size o
19790 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  f the column cac
197a0 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  he.*/.#ifndef SQ
197b0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a  LITE_N_COLCACHE.
197c0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
197d0 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65  N_COLCACHE 10.#e
197e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  ndif../*.** At l
197f0 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
19800 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
19810 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
19820 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
19830 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61   .** trigger tha
19840 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
19850 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
19860 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
19870 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
19880 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
19890 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
198a0 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
198b0 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
198c0 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
198d0 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
198e0 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
198f0 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
19900 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
19910 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
19920 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
19930 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
19940 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
19950 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
19960 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
19970 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
19980 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
19990 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
199a0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
199b0 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
199c0 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
199d0 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
199e0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
199f0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
19a00 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
19a10 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
19a20 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
19a30 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
19a40 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
19a50 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
19a60 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
19a70 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
19a80 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
19a90 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
19aa0 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
19ab0 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
19ac0 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
19ad0 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
19ae0 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  RT .** statement
19af0 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
19b00 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
19b10 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
19b20 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
19b30 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
19b40 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
19b50 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
19b60 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
19b70 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
19b80 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
19b90 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
19ba0 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
19bb0 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
19bc0 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
19bd0 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
19be0 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
19bf0 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
19c00 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
19c10 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
19c20 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
19c30 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
19c40 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
19c50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
19c60 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
19c70 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
19c80 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
19c90 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
19ca0 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
19cb0 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
19cc0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
19cd0 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
19ce0 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
19cf0 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
19d00 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
19d10 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
19d20 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
19d30 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
19d40 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
19d50 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
19d60 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
19d70 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
19d80 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
19d90 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
19da0 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
19db0 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
19dc0 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
19dd0 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
19de0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
19df0 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
19e00 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
19e10 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
19e20 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
19e30 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
19e40 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
19e50 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
19e60 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
19e70 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
19e80 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
19e90 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
19ea0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
19eb0 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
19ec0 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
19ed0 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
19ee0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
19ef0 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
19f00 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
19f10 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
19f20 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
19f30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
19f40 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
19f50 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
19f60 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
19f70 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
19f80 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
19f90 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
19fa0 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
19fb0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
19fc0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
19fd0 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
19fe0 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
19ff0 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1a000 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1a010 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1a020 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1a030 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1a040 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1a050 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1a060 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1a070 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1a080 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1a090 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1a0a0 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1a0b0 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1a0c0 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1a0d0 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1a0e0 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1a0f0 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1a100 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1a110 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1a120 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1a130 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1a140 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1a150 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1a160 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1a170 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1a180 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66  ared-cache .** f
1a190 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1a1a0 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1a1b0 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1a1c0 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1a1d0 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1a1e0 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1a1f0 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1a200 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1a210 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1a220 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1a230 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1a240 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1a250 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1a260 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1a270 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1a280 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1a290 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1a2a0 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1a2b0 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1a2c0 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1a2d0 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1a2e0 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1a2f0 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1a300 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1a310 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1a320 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1a330 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1a340 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1a350 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1a360 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1a370 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1a380 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1a390 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1a3a0 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1a3b0 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1a3c0 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1a3d0 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1a3e0 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1a3f0 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1a400 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1a410 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1a420 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1a430 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1a440 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1a450 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1a460 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a470 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1a480 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1a490 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1a4a0 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1a4b0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1a4c0 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1a4d0 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1a4e0 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1a4f0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1a500 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1a510 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1a520 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1a530 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1a540 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1a550 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1a560 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1a570 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1a580 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1a590 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1a5a0 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1a5b0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  ts */.  int aTem
1a5c0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
1a5d0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
1a5e0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1a5f0 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
1a600 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1a610 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
1a620 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1a630 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1a640 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
1a650 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
1a660 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
1a670 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1a680 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1a690 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a6a0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
1a6b0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a6d0 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
1a6e0 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
1a6f0 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
1a700 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
1a710 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a720 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
1a730 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1a740 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
1a750 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a760 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
1a770 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
1a780 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1a790 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
1a7a0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
1a7b0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1a7c0 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1a7d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1a7e0 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1a7f0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1a800 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20   int iFixedOp;  
1a810 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62        /* Never b
1a820 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20  ack out opcodes 
1a830 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61  iFixedOp-1 or ea
1a840 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63  rlier */.  int c
1a850 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
1a860 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1a870 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
1a880 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
1a890 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74  s */.  int iPart
1a8a0 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54  IdxTab;     /* T
1a8b0 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
1a8c0 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20  ng to a partial 
1a8d0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69  index */.  int i
1a8e0 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
1a8f0 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
1a900 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
1a910 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
1a920 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
1a930 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
1a940 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
1a950 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
1a960 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
1a970 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  ues */.  int nLa
1a980 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
1a990 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   Number of label
1a9a0 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
1a9b0 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20  *aLabel;        
1a9c0 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
1a9d0 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a  d the labels */.
1a9e0 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
1a9f0 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
1aa00 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
1aa10 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
1aa20 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
1aa30 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
1aa40 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
1aa50 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
1aa60 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
1aa70 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
1aa80 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
1aa90 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
1aaa0 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
1aab0 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
1aac0 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
1aad0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
1aae0 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
1aaf0 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
1ab00 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1ab10 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
1ab20 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
1ab30 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
1ab40 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
1ab50 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
1ab60 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
1ab70 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
1ab80 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
1ab90 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
1aba0 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
1abb0 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
1abc0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
1abd0 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
1abe0 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
1abf0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
1ac00 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
1ac10 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
1ac20 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
1ac30 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
1ac40 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
1ac50 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
1ac60 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
1ac70 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
1ac80 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
1ac90 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
1aca0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
1acb0 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
1acc0 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
1acd0 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49  cookieValue[SQLI
1ace0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1acf0 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f  2];  /* Values o
1ad00 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72  f cookies to ver
1ad10 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ify */.  int reg
1ad20 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
1ad30 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1ad40 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
1ad50 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
1ad60 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
1ad70 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1ad80 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
1ad90 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
1ada0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
1adb0 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
1adc0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
1add0 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
1ade0 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
1adf0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66  b-program */.#if
1ae00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1ae10 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1ae20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1ae30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ae40 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1ae50 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1ae60 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1ae70 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1ae80 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1ae90 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1aea0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1aeb0 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1aec0 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1aed0 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1aee0 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1aef0 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
1af00 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
1af10 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
1af20 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
1af30 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
1af40 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
1af50 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
1af60 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
1af70 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
1af80 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
1af90 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
1afa0 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
1afb0 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
1afc0 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
1afd0 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
1afe0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e  eTable opcode on
1aff0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1b000 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50  .  int addrSkipP
1b010 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  K;      /* Addre
1b020 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f  ss of instructio
1b030 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52  n to skip PRIMAR
1b040 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20  Y KEY index */. 
1b050 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
1b060 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
1b070 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
1b080 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
1b090 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
1b0a0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
1b0b0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
1b0c0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
1b0d0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
1b0e0 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
1b0f0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
1b100 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1b110 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
1b120 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
1b130 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
1b140 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
1b150 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
1b160 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
1b170 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1b180 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
1b190 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
1b1a0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
1b1b0 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
1b1c0 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
1b1d0 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
1b1e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b1f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b220 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
1b230 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
1b240 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
1b250 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
1b260 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
1b270 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
1b280 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
1b290 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
1b2a0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
1b2b0 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
1b2c0 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
1b2d0 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74  Parse,nVar) so t
1b2e0 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75  he nVar field mu
1b2f0 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20  st be the first 
1b300 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68  field.  ** in th
1b310 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
1b320 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
1b330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1b370 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20  .  int nVar;    
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b390 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
1b3a0 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
1b3b0 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
1b3c0 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20  /.  int nzVar;  
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b3e0 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c   Number of avail
1b3f0 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a  able slots in az
1b400 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50  Var[] */.  u8 iP
1b410 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1b420 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1b430 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1b440 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1b450 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20   u8 bFreeWith;  
1b460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1b470 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75  ue if pWith shou
1b480 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68  ld be freed with
1b490 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20   parser */.  u8 
1b4a0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
1b4b0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1b4c0 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
1b4d0 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
1b4e0 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
1b4f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b500 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
1b510 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
1b520 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b530 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
1b540 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1b550 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
1b560 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
1b570 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
1b580 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
1b590 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
1b5a0 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
1b5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b5c0 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
1b5d0 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1b5e0 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
1b5f0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
1b600 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
1b610 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
1b620 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
1b630 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
1b640 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1b650 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
1b660 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b670 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
1b680 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
1b690 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
1b6a0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
1b6b0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
1b6c0 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
1b6d0 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
1b6e0 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1b6f0 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
1b700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1b710 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
1b720 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
1b730 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
1b740 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
1b750 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
1b760 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
1b770 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
1b780 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
1b790 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
1b7a0 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
1b7b0 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
1b7c0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
1b7d0 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
1b7e0 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
1b7f0 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
1b800 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
1b810 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
1b820 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
1b830 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
1b840 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
1b850 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
1b860 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
1b870 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1b880 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
1b890 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
1b8a0 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
1b8b0 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1b8c0 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1b8d0 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
1b8e0 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
1b8f0 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
1b900 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
1b910 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
1b920 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
1b930 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1b940 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1b950 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
1b960 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1b970 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
1b980 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
1b990 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
1b9a0 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
1b9b0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1b9c0 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
1b9d0 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
1b9e0 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
1b9f0 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
1ba00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
1ba10 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
1ba20 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
1ba30 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
1ba40 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
1ba50 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
1ba60 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
1ba70 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
1ba80 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1ba90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
1baa0 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
1bab0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a  , or NULL */.};.
1bac0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1bad0 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
1bae0 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
1baf0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1bb00 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
1bb10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1bb20 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
1bb30 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1bb40 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
1bb50 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1bb60 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
1bb70 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
1bb80 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
1bb90 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1bba0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1bbb0 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
1bbc0 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
1bbd0 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
1bbe0 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
1bbf0 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
1bc00 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
1bc10 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
1bc20 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
1bc30 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
1bc40 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1bc50 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
1bc60 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
1bc70 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
1bc80 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1bc90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1bca0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
1bcb0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
1bcc0 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
1bcd0 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
1bce0 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
1bcf0 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74  *.** Note that t
1bd00 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 49 53  he values for IS
1bd10 4e 4f 4f 50 20 61 6e 64 20 4c 45 4e 47 54 48 41  NOOP and LENGTHA
1bd20 52 47 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e  RG are the same.
1bd30 20 20 42 75 74 20 61 73 20 0a 2a 2a 20 74 68 6f    But as .** tho
1bd40 73 65 20 62 69 74 73 20 61 72 65 20 6e 65 76 65  se bits are neve
1bd50 72 20 75 73 65 64 20 6f 6e 20 74 68 65 20 73 61  r used on the sa
1bd60 6d 65 20 6f 70 63 6f 64 65 2c 20 74 68 65 20 6f  me opcode, the o
1bd70 76 65 72 6c 61 70 20 69 73 20 68 61 72 6d 6c 65  verlap is harmle
1bd80 73 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ss..*/.#define O
1bd90 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
1bda0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
1bdb0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1bdc0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
1bdd0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1bde0 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1bdf0 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1be00 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1be10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1be20 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1be30 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1be40 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1be50 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1be60 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1be70 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1be80 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1be90 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1bea0 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1beb0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1bec0 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1bed0 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1bee0 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1bef0 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
1bf00 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
1bf10 45 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  E    0x20    /* 
1bf20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62  Clear pseudo-tab
1bf30 6c 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43  le cache in OP_C
1bf40 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
1bf50 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20   OPFLAG_ISNOOP  
1bf60 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a        0x40    /*
1bf70 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20   OP_Delete does 
1bf80 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
1bf90 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1bfa0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
1bfb0 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
1bfc0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1bfd0 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
1bfe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1bff0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
1c000 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
1c010 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1c020 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
1c030 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
1c040 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
1c050 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
1c060 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
1c070 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
1c080 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
1c090 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20  SREG       0x02 
1c0a0 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
1c0b0 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
1c0c0 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
1c0d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
1c0e0 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
1c0f0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
1c100 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
1c110 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  ation */../*. * 
1c120 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
1c130 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
1c140 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
1c150 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
1c160 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
1c170 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20  t Trigger. . *. 
1c180 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
1c190 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
1c1a0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
1c1b0 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
1c1c0 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
1c1d0 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
1c1e0 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
1c1f0 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
1c200 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a  represents the .
1c210 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
1c220 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
1c230 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
1c240 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
1c250 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
1c260 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
1c270 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
1c280 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
1c290 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
1c2a0 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
1c2b0 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
1c2c0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
1c2d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1c2e0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1c2f0 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
1c300 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
1c310 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
1c320 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
1c330 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
1c340 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
1c350 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
1c360 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
1c370 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1c380 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
1c390 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
1c3a0 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
1c3b0 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
1c3c0 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
1c3d0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
1c3e0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
1c3f0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
1c400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1c410 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
1c420 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
1c440 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
1c450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1c460 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
1c470 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
1c480 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
1c490 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1c4a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1c4b0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1c4c0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1c4d0 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
1c4e0 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
1c4f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1c500 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
1c510 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
1c520 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1c530 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1c540 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
1c550 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
1c560 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
1c570 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
1c580 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
1c590 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
1c5a0 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
1c5b0 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1c5e0 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
1c5f0 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
1c600 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1c610 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
1c620 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1c630 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
1c640 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
1c650 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
1c660 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1c670 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
1c680 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
1c690 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
1c6a0 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
1c6b0 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
1c6c0 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
1c6d0 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
1c6e0 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
1c6f0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
1c700 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
1c710 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
1c720 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
1c730 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
1c740 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
1c750 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
1c760 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
1c770 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a  ne which. .**.**
1c780 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75   If there are mu
1c790 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c  ltiple triggers,
1c7a0 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f   you might of so
1c7b0 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f  me BEFORE and so
1c7c0 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20  me AFTER..** In 
1c7d0 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20  that cases, the 
1c7e0 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20  constants below 
1c7f0 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65  can be ORed toge
1c800 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
1c810 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20   TRIGGER_BEFORE 
1c820 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47   1.#define TRIGG
1c830 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a  ER_AFTER   2../*
1c840 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
1c850 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1c860 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f  rStep is used to
1c870 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20   store a single 
1c880 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a  SQL statement. *
1c890 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20   that is a part 
1c8a0 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  of a trigger-pro
1c8b0 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73  gram. . *. * Ins
1c8c0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1c8d0 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
1c8e0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
1c8f0 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
1c900 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
1c910 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
1c920 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
1c930 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
1c940 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
1c950 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20   . * associated 
1c960 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
1c970 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
1c980 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
1c990 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
1c9a0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
1c9b0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
1c9c0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20  r-program.. * . 
1c9d0 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
1c9e0 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
1c9f0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
1ca00 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
1ca10 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
1ca20 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
1ca30 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
1ca40 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
1ca50 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
1ca60 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20  ined by the . * 
1ca70 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
1ca80 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
1ca90 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
1caa0 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
1cab0 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
1cac0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
1cad0 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
1cae0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1caf0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1cb00 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
1cb10 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1cb30 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
1cb40 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
1cb50 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
1cb60 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61  wise NULL.. * ta
1cb70 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1cb80 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1cb90 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1cba0 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
1cbb0 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
1cbc0 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
1cbd0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1cbe0 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
1cbf0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1cc00 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1cc10 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
1cc20 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
1cc30 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
1cc40 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
1cc50 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1cc60 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1cc70 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
1cc80 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20  >) VALUES ... . 
1cc90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
1cca0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
1ccb0 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
1ccc0 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
1ccd0 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1cce0 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
1ccf0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1cd00 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67  _DELETE). * targ
1cd10 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1cd20 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1cd30 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1cd40 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
1cd50 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
1cd60 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1cd70 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
1cd80 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
1cd90 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1cda0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1cdb0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1cdc0 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d  LL.. * . * (op =
1cdd0 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
1cde0 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1cdf0 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1ce00 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1ce10 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
1ce20 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20  ate rows of.. * 
1ce30 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1ce40 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1ce50 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1ce60 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1ce70 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1ce80 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1ce90 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
1cea0 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
1ceb0 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
1cec0 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
1ced0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
1cee0 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
1cef0 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
1cf00 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
1cf10 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
1cf20 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
1cf30 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
1cf40 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a    argument.. * .
1cf50 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1cf60 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
1cf70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cf80 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1cf90 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1cfa0 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
1cfb0 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
1cfc0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
1cfd0 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
1cfe0 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
1cff0 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
1d000 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
1d010 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
1d020 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
1d030 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1d040 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1d050 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
1d060 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45  NSERT INTO .. SE
1d070 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f  LECT ... */.  To
1d080 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20  ken target;     
1d090 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
1d0a0 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
1d0b0 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
1d0c0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1d0d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1d0e0 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1d0f0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
1d100 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
1d110 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
1d120 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
1d130 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20  or UPDATE. */.  
1d140 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
1d150 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
1d160 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
1d170 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1d180 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1d190 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69  t in the link-li
1d1a0 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  st */.  TriggerS
1d1b0 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20  tep *pLast;  /* 
1d1c0 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  Last element in 
1d1d0 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64  link-list. Valid
1d1e0 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e   for 1st elem on
1d1f0 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ly */.};../*.** 
1d200 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
1d210 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1d220 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
1d230 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46  d by the sqliteF
1d240 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65  ix....** routine
1d250 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74  s as they walk t
1d260 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f  he parse tree to
1d270 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72   make database r
1d280 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70  eferences.** exp
1d290 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65  licit.  .*/.type
1d2a0 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
1d2b0 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
1d2c0 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
1d2d0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1d2e0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
1d2f0 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
1d300 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
1d310 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
1d320 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
1d330 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
1d340 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
1d350 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
1d360 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
1d370 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
1d380 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
1d390 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1d3a0 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
1d3b0 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
1d3c0 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
1d3d0 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
1d3e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1d3f0 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
1d400 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1d410 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1d420 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
1d430 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
1d440 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
1d450 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1d460 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1d470 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
1d480 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
1d490 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
1d4a0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
1d4b0 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
1d4c0 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
1d4d0 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
1d4e0 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
1d4f0 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
1d500 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
1d510 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
1d520 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1d530 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
1d540 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
1d550 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
1d560 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
1d570 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
1d580 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
1d590 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
1d5a0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
1d5b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1d5c0 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
1d5d0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1d5e0 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  t  nChar;       
1d5f0 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
1d600 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
1d610 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c  r */.  int  nAll
1d620 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
1d630 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
1d640 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
1d650 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c  t */.  int  mxAl
1d660 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
1d670 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73  aximum allowed s
1d680 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1d690 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63    u8   useMalloc
1d6a0 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e  ;      /* 0: non
1d6b0 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62  e,  1: sqlite3Db
1d6c0 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69  Malloc,  2: sqli
1d6d0 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20  te3_malloc */.  
1d6e0 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
1d6f0 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
1d700 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
1d710 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a  UM_TOOBIG */.};.
1d720 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1d730 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69  _NOMEM   1.#defi
1d740 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  ne STRACCUM_TOOB
1d750 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  IG  2../*.** A p
1d760 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
1d770 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
1d780 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
1d790 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
1d7a0 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
1d7b0 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
1d7c0 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
1d7d0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
1d7e0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1d7f0 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
1d800 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
1d810 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
1d820 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1d830 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
1d840 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
1d850 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
1d860 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
1d870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
1d880 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
1d890 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
1d8a0 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
1d8b0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
1d8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1d8d0 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
1d8e0 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
1d8f0 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
1d900 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
1d910 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
1d920 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
1d930 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
1d940 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
1d950 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
1d960 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
1d970 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1d980 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
1d990 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
1d9a0 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d9c0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
1d9d0 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
1d9e0 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1da10 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
1da20 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
1da30 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
1da40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1da50 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
1da60 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1da70 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da90 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
1daa0 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
1dab0 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
1dac0 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dae0 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
1daf0 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
1db00 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d  scans */.  int m
1db10 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db30 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
1db40 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e  ength */.  int n
1db50 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20  everCorrupt;    
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db70 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61  Database is alwa
1db80 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a  ys well-formed *
1db90 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73  /.  int szLookas
1dba0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1dbb0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1dbc0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1dbd0 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  r size */.  int 
1dbe0 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  nLookaside;     
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1dc00 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1dc10 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20  de buffer count 
1dc20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
1dc30 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
1dc40 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
1dc50 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
1dc60 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
1dc70 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1dc80 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
1dc90 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
1dca0 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
1dcb0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1dcc0 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
1dcd0 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
1dce0 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
1dcf0 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
1dd00 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
1dd30 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
1dd40 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
1dd70 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
1dd80 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
1dd90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
1dda0 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
1ddb0 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
1ddc0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1ddd0 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
1dde0 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
1ddf0 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
1de00 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
1de10 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
1de20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1de30 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
1de40 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
1de50 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  *pScratch;      
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1de70 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a  Scratch memory *
1de80 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63  /.  int szScratc
1de90 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1dea0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1deb0 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75   each scratch bu
1dec0 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ffer */.  int nS
1ded0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1def0 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68  umber of scratch
1df00 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
1df10 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
1df40 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1df50 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1df60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1df70 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
1df80 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1df90 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dfc0 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
1dfd0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
1dfe0 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
1dff0 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
1e000 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
1e010 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
1e020 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
1e030 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
1e040 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
1e050 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1e060 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a   enabled */.  /*
1e070 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
1e080 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1e090 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
1e0a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
1e0b0 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
1e0c0 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
1e0d0 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
1e0e0 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e100 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1e110 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1e120 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
1e130 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
1e140 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e150 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
1e160 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
1e170 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
1e180 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
1e190 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1e1a0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1e1b0 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
1e1c0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1e1d0 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1e200 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1e210 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1e220 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
1e230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1e240 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1e250 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1e260 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1e270 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1e280 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e290 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1e2a0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
1e2b0 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
1e2c0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
1e2d0 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
1e2e0 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1e2f0 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
1e300 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
1e310 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
1e320 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
1e330 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
1e340 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
1e370 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
1e380 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1e390 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1e3a0 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1e3b0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1e3c0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1e3d0 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1e3e0 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
1e3f0 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
1e400 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
1e410 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
1e420 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
1e430 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
1e440 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
1e450 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
1e460 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
1e470 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
1e480 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1e490 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
1e4a0 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
1e4b0 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
1e4c0 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
1e4d0 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
1e4e0 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
1e4f0 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
1e530 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
1e540 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1e550 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
1e560 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
1e570 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
1e580 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
1e590 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
1e5a0 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
1e5b0 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
1e5c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1e5d0 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
1e5e0 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
1e5f0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
1e600 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
1e610 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
1e620 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1e630 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
1e640 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
1e650 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
1e660 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
1e670 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
1e680 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
1e690 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
1e6a0 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
1e6b0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1e6c0 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
1e6d0 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
1e6e0 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
1e6f0 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
1e700 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
1e710 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
1e720 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
1e730 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
1e740 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
1e750 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
1e760 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
1e770 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
1e780 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
1e790 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
1e7a0 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
1e7b0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
1e7c0 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
1e7d0 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
1e7e0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
1e7f0 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
1e800 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
1e810 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
1e820 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
1e830 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
1e840 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
1e850 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
1e860 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
1e870 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
1e880 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
1e890 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
1e8a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
1e8b0 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
1e8c0 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
1e8d0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
1e8e0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1e8f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1e900 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
1e910 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1e920 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
1e930 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1e940 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
1e950 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
1e960 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1e970 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
1e980 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
1e990 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  s */.  Parse *pP
1e9a0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9c0 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
1e9d0 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61  xt.  */.  int wa
1e9e0 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ea10 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
1ea20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1ea50 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
1ea60 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
1ea70 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
1eaa0 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
1eab0 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1eae0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a  nteger value */.
1eaf0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1eb00 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eb20 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1eb30 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1eb40 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb60 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1eb70 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1eb80 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1eb90 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1eba0 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1ebb0 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1ebc0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1ebd0 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1ebe0 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1ebf0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1ec00 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1ec10 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1ec20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1ec30 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1ec40 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1ec50 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1ec60 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1ec70 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1ec80 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1ec90 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1eca0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1ecb0 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1ecc0 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1ecd0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1ece0 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1ecf0 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1ed00 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1ed10 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1ed20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1ed30 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1ed40 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1ed50 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1ed60 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1ed70 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1ed80 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1ed90 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
1eda0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1edb0 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
1edc0 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
1edd0 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
1ede0 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
1edf0 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
1ee00 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
1ee10 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
1ee20 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
1ee30 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
1ee60 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
1ee70 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
1ee80 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
1ee90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1eea0 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
1eeb0 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1eec0 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
1eef0 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
1ef00 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
1ef10 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
1ef40 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
1ef50 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1ef70 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
1ef80 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
1ef90 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
1efa0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1efc0 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
1efd0 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
1efe0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1eff0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
1f000 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
1f010 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
1f020 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1f030 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  } a[1];.};../*.*
1f040 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
1f050 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
1f060 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
1f070 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
1f080 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
1f090 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
1f0a0 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
1f0b0 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
1f0c0 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
1f0d0 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
1f0e0 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1f100 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
1f110 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f130 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
1f140 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
1f150 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
1f160 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
1f170 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
1f1b0 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
1f1c0 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
1f1d0 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
1f1e0 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
1f1f0 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
1f200 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
1f210 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
1f220 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
1f230 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
1f240 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
1f250 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
1f260 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
1f270 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
1f280 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
1f290 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
1f2a0 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
1f2b0 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
1f2c0 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
1f2d0 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
1f2e0 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
1f2f0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1f300 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
1f310 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
1f320 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1f330 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
1f340 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
1f350 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1f360 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
1f370 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1f380 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
1f390 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
1f3a0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
1f3b0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1f3c0 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
1f3d0 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
1f3e0 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
1f3f0 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  _).../*.** FTS4 
1f400 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
1f410 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
1f420 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
1f430 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
1f440 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
1f450 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
1f460 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
1f470 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74  e also call.** t
1f480 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
1f490 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
1f4a0 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73  erve as an alias
1f4b0 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
1f4c0 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
1f4d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1f4e0 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
1f4f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1f500 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
1f510 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
1f520 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a  LE_FTS3.#endif..
1f530 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
1f540 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
1f550 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
1f560 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
1f570 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
1f580 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
1f590 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
1f5a0 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
1f5b0 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
1f5c0 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
1f5d0 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
1f5e0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1f5f0 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
1f600 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
1f610 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
1f620 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
1f630 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1f640 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
1f650 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
1f660 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
1f670 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
1f680 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
1f690 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
1f6a0 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
1f6b0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
1f6c0 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
1f6d0 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
1f6e0 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
1f6f0 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
1f700 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
1f710 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
1f720 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
1f730 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1f740 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
1f750 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1f760 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
1f770 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f780 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
1f790 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1f7a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f7b0 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
1f7c0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1f7d0 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
1f7e0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1f7f0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
1f800 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f810 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
1f820 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1f830 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f840 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
1f850 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
1f860 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
1f870 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1f880 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
1f890 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f8a0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
1f8b0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1f8c0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f8d0 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
1f8e0 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
1f8f0 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
1f900 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
1f910 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
1f920 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1f930 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
1f940 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
1f950 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1f960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f970 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
1f980 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
1f990 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1f9a0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1f9b0 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
1f9c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1f9d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f9e0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
1f9f0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
1fa00 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1fa10 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1fa20 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
1fa30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1fa40 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1fa50 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
1fa60 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
1fa70 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1fa80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1fa90 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
1faa0 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1fab0 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  r)(x)).#endif../
1fac0 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
1fad0 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
1fae0 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c  s.*/.#define sql
1faf0 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69  ite3StrICmp sqli
1fb00 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20  te3_stricmp.int 
1fb10 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
1fb20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
1fb30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
1fb40 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
1fb50 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
1fb60 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
1fb70 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1fb80 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
1fb90 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
1fba0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1fbb0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
1fbc0 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  ero(int);.void *
1fbd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1fbe0 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ero(sqlite3*, in
1fbf0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1fc00 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
1fc10 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  ite3*, int);.cha
1fc20 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
1fc30 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
1fc40 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
1fc50 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
1fc60 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1fc70 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  char*, int);.voi
1fc80 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
1fc90 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76  c(void*, int);.v
1fca0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
1fcb0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
1fcc0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
1fcd0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1fce0 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
1fcf0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
1fd00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1fd10 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
1fd20 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
1fd30 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
1fd40 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
1fd50 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
1fd60 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1fd70 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53  ;.void *sqlite3S
1fd80 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74  cratchMalloc(int
1fd90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1fda0 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a  cratchFree(void*
1fdb0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1fdc0 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
1fdd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
1fde0 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
1fdf0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
1fe00 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76  Default(void);.v
1fe10 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
1fe20 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
1fe30 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
1fe40 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e  d (*)(void));.in
1fe50 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
1fe60 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
1fe70 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
1fe80 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
1fe90 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
1fea0 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
1feb0 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
1fec0 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
1fed0 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
1fee0 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
1fef0 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
1ff00 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
1ff10 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
1ff20 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
1ff30 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
1ff40 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
1ff50 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
1ff60 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
1ff70 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
1ff80 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1ff90 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
1ffa0 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
1ffb0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1ffc0 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
1ffd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1ffe0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1fff0 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
20000 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
20010 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
20020 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
20030 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
20040 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
20050 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23  ee(D,P)       .#
20060 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
20070 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
20080 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
20090 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
200a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
200b0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
200c0 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
200d0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
200e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
200f0 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
20100 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
20110 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
20120 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20130 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
20140 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
20150 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
20160 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
20170 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
20180 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
20190 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
201a0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
201b0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
201c0 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
201d0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
201e0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
201f0 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
20200 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
20210 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
20220 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
20230 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
20240 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
20250 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
20260 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
20270 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
20280 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
20290 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
202a0 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
202b0 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
202c0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  void);.#endif..i
202d0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  nt sqlite3Status
202e0 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
202f0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64   sqlite3StatusAd
20300 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  d(int, int);.voi
20310 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53  d sqlite3StatusS
20320 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  et(int, int);..#
20330 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20340 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
20350 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
20360 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
20370 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20380 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
20390 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
203a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
203b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
203c0 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
203d0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
203e0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
203f0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
20400 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
20410 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
20420 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
20430 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
20440 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
20450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20460 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
20470 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
20480 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
20490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
204a0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
204b0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
204c0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
204d0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
204e0 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
204f0 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ues */.};..#defi
20500 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
20510 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23  _INTERNAL 0x01.#
20520 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
20530 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
20540 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  02.void sqlite3V
20550 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
20560 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
20570 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
20580 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
20590 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
205a0 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
205b0 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
205c0 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
205d0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
205e0 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
205f0 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
20600 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
20610 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61  *, va_list);.cha
20620 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e  r *sqlite3MAppen
20630 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72  df(sqlite3*,char
20640 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  *,const char*,..
20650 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .);.#if defined(
20660 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
20670 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
20680 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
20690 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
206a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
206b0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
206c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
206d0 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
206e0 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
206f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
20700 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20  ndif../* Output 
20710 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53  formatting for S
20720 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45  QLITE_TESTCTRL_E
20730 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65  XPLAIN */.#if de
20740 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
20750 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e  BLE_TREE_EXPLAIN
20760 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
20770 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62  ExplainBegin(Vdb
20780 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
20790 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66  te3ExplainPrintf
207a0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
207b0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69  ar*, ...);.  voi
207c0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
207d0 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  NL(Vdbe*);.  voi
207e0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
207f0 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  Push(Vdbe*);.  v
20800 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20810 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20  inPop(Vdbe*);.  
20820 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
20830 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29  ainFinish(Vdbe*)
20840 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20850 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64  ExplainSelect(Vd
20860 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20  be*, Select*);. 
20870 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
20880 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20  lainExpr(Vdbe*, 
20890 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
208a0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
208b0 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70  rList(Vdbe*, Exp
208c0 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74  rList*);.  const
208d0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64   char *sqlite3Vd
208e0 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64  beExplanation(Vd
208f0 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  be*);.#else.# de
20900 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
20910 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65  ainBegin(X).# de
20920 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
20930 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23  ainSelect(A,B).#
20940 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
20950 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a  xplainExpr(A,B).
20960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20970 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28  ExplainExprList(
20980 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
20990 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69  lite3ExplainFini
209a0 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  sh(X).# define s
209b0 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
209c0 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69  ation(X) 0.#endi
209d0 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
209e0 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
209f0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
20a00 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
20a10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
20a20 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
20a30 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
20a40 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
20a50 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
20a60 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
20a70 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
20a80 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
20a90 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
20aa0 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
20ab0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
20ac0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
20ad0 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
20ae0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
20af0 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
20b00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
20b10 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
20b20 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
20b30 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
20b40 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
20b50 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
20b60 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
20b70 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
20b80 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
20b90 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
20ba0 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
20bb0 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
20bc0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
20bd0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
20be0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
20bf0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
20c00 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
20c10 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
20c20 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
20c30 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
20c40 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
20c50 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
20c60 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
20c70 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
20c80 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
20c90 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
20ca0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
20cb0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20cc0 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
20cd0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
20ce0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20cf0 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
20d00 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
20d10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20d20 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
20d30 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
20d40 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
20d50 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
20d60 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
20d70 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
20d80 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
20d90 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
20da0 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
20db0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
20dc0 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
20dd0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
20de0 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
20df0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
20e00 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
20e10 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
20e20 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
20e30 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
20e40 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
20e50 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
20e60 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
20e70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
20e80 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
20e90 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
20ea0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
20eb0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
20ec0 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
20ed0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
20ee0 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
20ef0 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
20f00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20f10 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
20f20 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
20f30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
20f40 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
20f50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20f60 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
20f70 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
20f80 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
20f90 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
20fa0 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
20fb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
20fc0 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
20fd0 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e  arse *, int);.In
20fe0 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d  dex *sqlite3Prim
20ff0 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c  aryKeyIndex(Tabl
21000 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33  e*);.i16 sqlite3
21010 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e  ColumnOfIndex(In
21020 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64  dex*, i16);.void
21030 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
21040 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
21050 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
21060 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
21070 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
21080 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
21090 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
210a0 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
210b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
210c0 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
210d0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
210e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
210f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
21100 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
21110 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
21120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
21130 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
21140 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
21150 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
21160 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
21170 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
21180 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
21190 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
211a0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
211b0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
211c0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
211d0 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
211e0 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
211f0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
21200 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
21210 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
21220 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
21230 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
21240 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
21250 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
21260 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
21270 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
21280 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63  t sqlite3CodeOnc
21290 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66  e(Parse *);..#if
212a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
212b0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64  BUILTIN_TEST.# d
212c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
212d0 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
212e0 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
212f0 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
21300 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
21310 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
21320 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
21330 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
21340 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
21350 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
21360 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
21370 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
21380 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
21390 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
213a0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
213b0 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
213c0 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
213d0 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
213e0 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71  Bitvec*);.int sq
213f0 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
21400 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
21410 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74  ;..RowSet *sqlit
21420 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c  e3RowSetInit(sql
21430 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e  ite3*, void*, un
21440 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69  signed int);.voi
21450 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
21460 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76  lear(RowSet*);.v
21470 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
21480 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c  tInsert(RowSet*,
21490 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
214a0 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77  e3RowSetTest(Row
214b0 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68  Set*, int iBatch
214c0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
214d0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
214e0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
214f0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
21500 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
21510 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
21520 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
21530 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
21540 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
21550 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
21560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21570 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
21580 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
21590 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
215a0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
215b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
215c0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
215d0 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
215e0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
215f0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
21600 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
21610 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
21620 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
21630 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
21640 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
21650 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21660 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
21670 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
21680 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
21690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
216a0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
216b0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
216c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
216d0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
216e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
216f0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
21700 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
21710 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
21720 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
21730 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
21740 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
21750 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
21760 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
21770 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
21780 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
21790 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
217a0 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
217b0 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
217c0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
217d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
217e0 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
217f0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
21800 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
21810 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
21820 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
21830 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
21840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
21850 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
21860 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
21870 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
21880 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
21890 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
218a0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
218b0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
218c0 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
218d0 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
218e0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
218f0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
21900 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
21910 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
21920 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
21930 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21960 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
21970 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
21980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
21990 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
219a0 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
219b0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
219c0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
219d0 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
219e0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
219f0 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
21a00 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
21a10 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
21a20 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
21a30 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
21a40 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
21a50 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
21a60 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
21a70 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
21a80 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
21a90 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
21aa0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
21ab0 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
21ac0 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
21ad0 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
21ae0 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
21af0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
21b00 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
21b10 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21b20 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
21b30 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b50 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
21b60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21b70 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
21b80 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
21b90 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
21ba0 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
21bb0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
21bc0 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
21bd0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
21be0 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
21bf0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
21c00 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
21c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
21c30 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a  rList*,u16,Expr*
21c40 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
21c50 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
21c60 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
21c70 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
21c80 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
21c90 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
21ca0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21cb0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
21cc0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
21cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
21ce0 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
21cf0 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
21d00 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
21d10 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
21d20 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
21d30 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
21d40 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
21d50 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
21d60 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
21d70 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
21d80 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
21d90 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
21da0 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
21db0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
21dc0 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
21dd0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
21de0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21df0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
21e00 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
21e10 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
21e20 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
21e30 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
21e40 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
21e50 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
21e60 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
21e70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
21e80 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
21e90 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33  o*);.u64 sqlite3
21ea0 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
21eb0 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
21ec0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
21ed0 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
21ee0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21ef0 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
21f00 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
21f10 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
21f20 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
21f30 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
21f40 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
21f50 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
21f60 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
21f70 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
21f80 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
21f90 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
21fa0 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
21fb0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
21fc0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
21fd0 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
21fe0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
21ff0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
22000 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
22010 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
22020 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
22030 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22040 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
22050 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
22060 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22070 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
22080 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69  eStore(Parse*, i
22090 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
220a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
220b0 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29  achePush(Parse*)
220c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
220d0 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65  prCachePop(Parse
220e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
220f0 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
22100 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
22110 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22120 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
22130 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22140 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
22150 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
22160 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22170 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
22180 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  de(Parse*, Expr*
22190 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
221a0 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
221b0 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
221c0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
221d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
221e0 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
221f0 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
22200 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
22210 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
22220 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
22230 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22240 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
22250 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
22260 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22270 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
22280 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
22290 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
222a0 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
222b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
222c0 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
222d0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
222e0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
222f0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
22300 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
22310 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
22320 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
22330 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
22340 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69  ant terms */.voi
22350 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
22360 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
22370 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22380 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
22390 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
223a0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
223b0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
223c0 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
223d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
223e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
223f0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
22400 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
22410 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
22420 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
22430 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
22440 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
22450 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
22460 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
22470 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
22480 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
22490 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
224a0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
224b0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
224c0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
224d0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
224e0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
224f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22500 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
22510 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
22520 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
22530 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
22540 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
22550 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
22560 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
22570 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
22580 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
22590 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
225a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
225b0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
225c0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
225d0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
225e0 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
225f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22600 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22610 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
22620 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
22630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22640 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
22650 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
22660 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
22670 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
22680 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
22690 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
226a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
226b0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
226c0 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
226d0 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
226e0 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
226f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
22700 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
22710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
22720 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
22730 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
22740 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
22750 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
22760 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
22770 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
22780 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22790 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
227a0 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
227b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
227c0 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
227d0 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
227e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
227f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
22800 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
22810 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22820 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
22830 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
22840 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
22850 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
22860 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
22870 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
22880 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
22890 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
228a0 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
228b0 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
228c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
228d0 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
228e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
228f0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
22900 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
22910 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
22920 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
22930 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
22940 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
22950 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
22960 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22970 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
22980 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
22990 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
229a0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
229b0 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
229c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
229d0 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
229e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
229f0 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
22a00 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
22a10 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
22a20 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29  nt,i16,u8,u8,u8)
22a30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
22a40 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
22a50 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
22a60 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
22a70 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
22a80 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
22a90 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
22aa0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
22ab0 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74   int*,Index*,int
22ac0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
22ad0 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
22ae0 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  el(Parse*,int);.
22af0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
22b00 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
22b10 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
22b20 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
22b30 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
22b60 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  ,u8,int,int*);.v
22b70 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
22b80 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
22b90 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
22ba0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
22bb0 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
22bc0 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
22bd0 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
22be0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22bf0 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
22c00 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22c10 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
22c20 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
22c30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22c40 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
22c50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
22c60 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
22c70 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22c80 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
22c90 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
22ca0 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
22cb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22cc0 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
22cd0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
22ce0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
22cf0 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
22d00 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
22d10 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
22d20 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
22d30 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
22d40 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
22d50 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
22d60 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
22d70 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
22d80 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
22d90 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
22da0 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
22db0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
22dc0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
22dd0 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
22de0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
22df0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
22e00 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22e10 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
22e20 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
22e30 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
22e40 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
22e50 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
22e60 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
22e70 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
22e80 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
22e90 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
22ea0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
22eb0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
22ec0 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
22ed0 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
22ee0 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
22ef0 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
22f00 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
22f10 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
22f20 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
22f30 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
22f40 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
22f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
22f60 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
22f70 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
22f80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22f90 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
22fa0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22fb0 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
22fc0 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
22fd0 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
22fe0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
22ff0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
23000 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
23010 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
23020 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
23030 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
23040 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
23050 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
23060 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
23080 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
23090 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
230a0 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
230b0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
230c0 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
230d0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
230e0 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
230f0 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
23100 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
23110 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
23120 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
23130 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
23140 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
23150 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
23160 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
23170 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
23180 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
23190 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
231a0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
231b0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
231c0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
231d0 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
231e0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
231f0 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23210 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
23220 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
23230 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
23240 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
23250 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
23260 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
23270 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
23280 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
23290 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
232a0 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
232b0 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
232c0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
232d0 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
232e0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
232f0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
23300 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
23310 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
23320 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
23330 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
23340 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
23350 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
23360 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b      Select*,u8);
233a0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
233b0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
233c0 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
233d0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
233e0 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
233f0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
23400 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
23410 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
23420 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
23430 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
23440 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
23450 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
23460 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23470 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
23480 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
23490 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
234a0 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
234b0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
234c0 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
234d0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
234e0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
234f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
23500 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
23510 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
23520 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
23530 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
23540 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
23550 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
23560 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
23570 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
23580 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
23590 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
235a0 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
235b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
235c0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
235d0 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
235e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
235f0 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
23600 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
23610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
23620 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
23630 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
23640 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23650 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
23660 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
23670 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
23680 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
23690 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
236a0 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
236b0 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
236c0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
236d0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
236e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
236f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23700 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
23710 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
23720 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
23730 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
23740 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
23750 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
23760 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
23770 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
23780 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
23790 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
237a0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
237b0 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
237c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
237d0 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
237e0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
237f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23800 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
23810 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
23820 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
23830 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
23840 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
23850 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
23860 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
23870 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
23880 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
23890 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
238a0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
238b0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
238c0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
238d0 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
238e0 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
238f0 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
23900 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
23910 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
23920 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
23930 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
23940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
23950 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
23960 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
23970 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
23980 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
23990 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
239a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
239b0 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
239c0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
239d0 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
239e0 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
239f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
23a00 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
23a10 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
23a20 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
23a30 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
23a40 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
23a50 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
23a60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
23a70 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
23a80 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
23a90 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
23aa0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
23ab0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
23ac0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
23ad0 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
23ae0 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
23af0 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
23b00 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
23b10 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
23b20 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
23b30 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
23b40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
23b50 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
23b60 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
23b70 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
23b80 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
23b90 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
23ba0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
23bb0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
23bc0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
23bd0 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
23be0 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
23bf0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
23c00 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
23c10 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
23c20 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
23c30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23c40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23c50 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
23c60 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
23c70 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
23c80 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
23c90 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
23ca0 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
23cb0 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
23cc0 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
23cd0 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
23ce0 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
23cf0 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
23d00 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
23d10 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
23d20 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
23d30 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
23d40 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
23d50 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
23d60 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
23d70 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
23d80 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
23d90 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
23da0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
23db0 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
23dc0 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
23dd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
23de0 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
23df0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
23e00 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
23e10 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
23e20 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
23e30 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
23e40 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
23e50 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
23e60 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
23e70 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
23e80 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
23e90 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
23ea0 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
23eb0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
23ec0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
23ed0 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
23ee0 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
23ef0 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
23f00 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
23f10 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
23f20 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
23f30 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
23f40 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
23f50 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
23f60 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
23f70 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
23f80 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
23f90 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
23fa0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
23fb0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
23fc0 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
23fd0 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
23fe0 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
23ff0 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
24000 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f   *, Index *);.vo
24010 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
24020 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
24030 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
24040 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
24050 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
24060 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
24070 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
24080 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
24090 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
240a0 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
240b0 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
240c0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
240d0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
240e0 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
240f0 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
24100 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
24110 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
24120 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
24130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
24140 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
24150 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
24160 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
24170 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
24180 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
24190 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
241a0 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
241b0 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
241c0 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
241d0 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
241e0 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
241f0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
24200 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
24210 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
24220 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
24230 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61  TEST) .const cha
24240 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
24250 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
24260 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
24270 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
24280 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
24290 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
242a0 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
242b0 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
242c0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
242d0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
242e0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
242f0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
24300 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
24310 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
24320 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
24330 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
24340 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
24350 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
24360 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
24370 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
24380 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
24390 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
243a0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
243b0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53  3ExprAddCollateS
243c0 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70  tring(Parse*,Exp
243d0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
243e0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
243f0 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78  prSkipCollate(Ex
24400 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24410 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
24420 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
24430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
24440 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
24450 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
24460 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
24470 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
24480 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
24490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
244a0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
244b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
244c0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
244d0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
244e0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
244f0 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
24500 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
24510 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
24520 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
24530 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
24540 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
24550 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
24560 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
24570 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
24580 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
24590 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
245a0 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
245b0 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
245c0 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
245d0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
245e0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
245f0 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
24600 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
24610 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
24620 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
24630 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
24640 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20   *,u8, .        
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
24670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
24680 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
24690 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
246a0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
246b0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
246c0 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
246d0 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
246e0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61  (sqlite3 *);.cha
246f0 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74  r *sqlite3Utf16t
24700 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  o8(sqlite3 *, co
24710 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
24720 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
24730 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
24740 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
24750 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
24760 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
24770 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
24780 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
24790 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
247a0 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
247b0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
247c0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
247d0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
247e0 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
247f0 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
24800 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
24810 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
24820 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
24830 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
24840 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
24850 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
24860 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
24870 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
24880 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
24890 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
248a0 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
248b0 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
248c0 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
248d0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
248e0 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
248f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
24900 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
24910 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
24920 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
24930 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
24940 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
24950 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
24960 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
24970 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
24980 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
24990 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
249a0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
249b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
249c0 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
249d0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
249e0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
249f0 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
24a00 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
24a10 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
24a20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
24a30 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
24a40 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
24a50 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
24a60 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
24a70 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
24a80 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
24a90 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
24aa0 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
24ab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24ac0 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
24ad0 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
24ae0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
24af0 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
24b00 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
24b10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
24b20 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
24b30 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
24b40 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
24b50 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
24b60 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
24b70 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
24b80 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
24b90 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
24ba0 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
24bb0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
24bc0 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
24bd0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
24be0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
24bf0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
24c00 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
24c10 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
24c20 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
24c30 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
24c40 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
24c50 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
24c60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24c70 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
24c80 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
24c90 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
24ca0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
24cb0 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
24cc0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
24cd0 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
24ce0 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
24cf0 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
24d00 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
24d10 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
24d20 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
24d30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29  onst char*, u8*)
24d40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
24d50 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
24d60 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
24d70 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
24d80 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
24d90 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73  Handler*);.int s
24da0 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
24db0 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
24dc0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
24dd0 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
24de0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
24df0 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
24e00 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
24e10 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
24e20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
24e30 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
24e40 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
24e50 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
24e60 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
24e70 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
24e80 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
24e90 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
24ea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
24eb0 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
24ec0 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
24ed0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
24ee0 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f  te3MinimumFileFo
24ef0 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  rmat(Parse*, int
24f00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24f10 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
24f20 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20  void *);.Schema 
24f30 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65  *sqlite3SchemaGe
24f40 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72  t(sqlite3 *, Btr
24f50 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ee *);.int sqlit
24f60 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28  e3SchemaToIndex(
24f70 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68  sqlite3 *db, Sch
24f80 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ema *);.KeyInfo 
24f90 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
24fa0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
24fb0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
24fc0 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66  ite3KeyInfoUnref
24fd0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
24fe0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
24ff0 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29  nfoRef(KeyInfo*)
25000 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
25010 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78  e3KeyInfoOfIndex
25020 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29  (Parse*, Index*)
25030 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
25040 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
25050 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61  3KeyInfoIsWritea
25060 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23  ble(KeyInfo*);.#
25070 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
25080 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
25090 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
250a0 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
250b0 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28  oid *, .  void (
250c0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
250d0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
250e0 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
250f0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
25100 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
25110 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
25120 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
25130 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
25140 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
25150 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73  tructor.);.int s
25160 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
25170 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
25180 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
25190 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
251a0 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
251b0 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
251c0 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72  (StrAccum*, char
251d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
251e0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
251f0 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
25200 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
25210 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25220 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
25230 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  ll(StrAccum*,con
25240 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25250 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61  sqlite3AppendSpa
25260 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ce(StrAccum*,int
25270 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25280 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
25290 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
252a0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
252b0 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
252c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
252d0 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
252e0 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
252f0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
25300 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
25310 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
25320 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
25330 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
25340 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
25350 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
25360 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
25370 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
25380 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
25390 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
253a0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
253b0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
253c0 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
253d0 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
253e0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
253f0 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
25400 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78  lue(Parse*,Index
25410 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
25420 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c  **,Expr*,u8,int,
25430 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
25440 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
25450 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
25460 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
25470 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
25480 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
25490 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
254a0 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
254b0 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
254c0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
254d0 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
254e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
254f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
25500 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
25510 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
25520 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
25530 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
25540 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
25550 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73  size_t));.void s
25560 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
25570 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
25580 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
25590 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
255a0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
255b0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
255c0 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
255d0 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
255e0 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
255f0 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
25600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
25610 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
25620 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
25630 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
25640 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
25650 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
25660 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
25670 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
25680 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
25690 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
256a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
256b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
256c0 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
256d0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
256e0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
256f0 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
25700 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
25710 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
25720 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
25730 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
25740 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
25750 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
25760 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
25770 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
25780 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
25790 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
257a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
257b0 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
257c0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
257d0 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
257e0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
257f0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
25800 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
25810 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
25820 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
25830 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
25840 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
25850 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
25860 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  ) .#  define sql
25870 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
25880 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
25890 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
258a0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
258b0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
258c0 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
258d0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
258e0 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
258f0 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
25900 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
25910 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
25920 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
25930 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
25940 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
25950 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
25960 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
25970 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
25980 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
25990 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
259a0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
259b0 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
259c0 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
259d0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
259e0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
259f0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
25a00 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
25a10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
25a20 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
25a30 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
25a40 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
25a50 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
25a60 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
25a70 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
25a80 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
25a90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
25aa0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
25ab0 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
25ac0 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
25ad0 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
25ae0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
25af0 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
25b00 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
25b10 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
25b20 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
25b30 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
25b40 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
25b50 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
25b60 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
25b70 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
25b80 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
25b90 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
25ba0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
25bb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
25bc0 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
25bd0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
25be0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
25bf0 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
25c00 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
25c10 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
25c20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
25c30 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
25c40 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
25c50 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
25c60 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
25c70 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
25c80 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
25c90 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
25ca0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
25cb0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
25cc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
25cd0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
25ce0 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
25cf0 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
25d00 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
25d10 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
25d20 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
25d30 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
25d40 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25d50 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
25d60 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
25d70 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
25d80 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
25d90 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
25da0 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
25db0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
25dc0 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
25dd0 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
25de0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
25df0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25e00 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
25e10 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
25e20 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
25e30 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25e40 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
25e50 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
25e60 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
25e70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25e80 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
25e90 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
25ea0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
25eb0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
25ec0 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
25ed0 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
25ee0 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
25ef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
25f00 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
25f10 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
25f20 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
25f30 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
25f40 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
25f50 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
25f60 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
25f70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
25f80 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
25f90 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
25fa0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
25fb0 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
25fc0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
25fd0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
25fe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
25ff0 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
26000 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
26010 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
26020 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
26030 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
26040 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
26050 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
26060 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
26070 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
26080 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
26090 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
260a0 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
260b0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
260c0 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
260d0 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
260e0 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
260f0 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
26100 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
26110 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
26120 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
26130 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
26140 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
26150 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
26160 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
26170 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
26180 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
26190 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
261a0 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
261b0 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
261c0 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
261d0 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
261e0 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
261f0 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
26200 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
26210 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
26220 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
26230 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
26240 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
26250 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
26260 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
26270 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
26280 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
26290 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
262a0 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
262b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
262c0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
262d0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
262e0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
262f0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
26300 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26310 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
26320 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
26330 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
26340 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
26350 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
26360 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
26370 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
26380 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
26390 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
263a0 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
263b0 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
263c0 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
263d0 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
263e0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
263f0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
26400 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26410 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
26420 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
26430 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
26440 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
26450 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26460 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
26470 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
26480 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
26490 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
264a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
264b0 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
264c0 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66  c,d)    0.#endif
264d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
264e0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
264f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
26500 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
26510 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
26520 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
26530 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
26540 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
26550 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
26560 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
26570 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
26580 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26590 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
265a0 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
265b0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
265c0 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
265d0 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
265e0 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
265f0 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
26600 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
26610 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
26620 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
26630 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
26640 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
26650 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
26660 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
26670 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
26680 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
26690 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
266a0 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
266b0 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
266c0 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  ent if SQLITE_OM
266d0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
266e0 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
266f0 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
26700 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
26710 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  N_TEST.  void sq
26720 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
26730 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
26740 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
26750 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
26760 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
26770 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
26780 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
26790 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
267a0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
267b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
267c0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
267d0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
267e0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a  3FindInIndex().*
267f0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
26800 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
26810 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68  1   /* Search th
26820 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
26830 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
26840 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
26850 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61        2   /* Sea
26860 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rch an ephemeral
26870 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69   b-tree */.#defi
26880 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
26890 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20  X_ASC    3   /* 
268a0 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41  Existing index A
268b0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
268c0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
268d0 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a  EX_DESC   4   /*
268e0 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
268f0 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64  DESCENDING */.#d
26900 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
26910 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20  OOP         5   
26920 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69  /* No table avai
26930 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61  lable. Use compa
26940 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20  risons */./*.** 
26950 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f  Allowed flags fo
26960 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65  r the 3rd parame
26970 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69  ter to sqlite3Fi
26980 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a  ndInIndex()..*/.
26990 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
269a0 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30  _NOOP_OK     0x0
269b0 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65  001  /* OK to re
269c0 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  turn IN_INDEX_NO
269d0 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  OP */.#define IN
269e0 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49  _INDEX_MEMBERSHI
269f0 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e  P  0x0002  /* IN
26a00 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66   operator used f
26a10 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65  or membership te
26a20 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  st */.#define IN
26a30 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20  _INDEX_LOOP     
26a40 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e     0x0004  /* IN
26a50 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61   operator used a
26a60 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20  s a loop */.int 
26a70 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
26a80 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
26a90 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a   *, u32, int*);.
26aa0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26ab0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
26ac0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
26ad0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
26ae0 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
26af0 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
26b00 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
26b10 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
26b20 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
26b30 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69  ite3_vfs *);.  i
26b40 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
26b50 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
26b60 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73  file *);.  int s
26b70 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
26b80 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  sts(sqlite3_file
26b90 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64   *p);.#else.  #d
26ba0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
26bb0 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28  rnalSize(pVfs) (
26bc0 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65  (pVfs)->szOsFile
26bd0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26be0 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
26bf0 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f  (p) 1.#endif..vo
26c00 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
26c10 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
26c20 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71  _file *);.int sq
26c30 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53  lite3MemJournalS
26c40 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ize(void);.int s
26c50 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e  qlite3IsMemJourn
26c60 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  al(sqlite3_file 
26c70 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  *);..#if SQLITE_
26c80 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
26c90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
26ca0 78 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72  xprSetHeight(Par
26cb0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
26cc0 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69   *p);.  int sqli
26cd0 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
26ce0 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
26cf0 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
26d00 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
26d10 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
26d20 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26d30 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78  3ExprSetHeight(x
26d40 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
26d50 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
26d60 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
26d70 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
26d80 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
26d90 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
26da0 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
26db0 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
26dc0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
26dd0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
26de0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
26df0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
26e00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
26e10 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
26e20 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
26e30 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26e40 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
26e50 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
26e60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26e70 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
26e80 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
26e90 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
26ea0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
26eb0 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
26ec0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
26ed0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
26ee0 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
26ef0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
26f00 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
26f10 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26f20 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
26f30 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
26f40 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
26f50 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
26f60 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
26f70 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
26f80 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
26f90 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
26fa0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
26fb0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
26fc0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
26fd0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
26fe0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
26ff0 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
27000 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
27010 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
27020 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
27030 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
27040 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
27050 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
27060 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
27070 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
27080 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
27090 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  d (*sqlite3IoTra
270a0 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
270b0 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
270c0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
270d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
270e0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
270f0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
27100 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
27110 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
27120 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
27130 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
27140 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
27150 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
27160 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
27170 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
27180 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
27190 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
271a0 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
271b0 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
271c0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
271d0 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
271e0 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
271f0 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
27200 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
27210 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
27220 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
27230 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
27240 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
27250 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
27260 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
27270 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
27280 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
27290 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
272a0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
272b0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
272c0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
272d0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
272e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
272f0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
27300 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
27310 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
27320 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
27330 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
27340 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
27350 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
27360 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
27370 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
27380 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
27390 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
273a0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
273b0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
273c0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
273d0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
273e0 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
273f0 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
27400 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
27410 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
27420 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
27430 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
27440 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
27450 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
27460 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
27470 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
27480 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
27490 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
274a0 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
274b0 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
274c0 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
274d0 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
274e0 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
274f0 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
27500 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
27510 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
27520 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
27530 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
27540 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
27550 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
27560 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
27570 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
27580 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
27590 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
275a0 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
275b0 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
275c0 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
275d0 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
275e0 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
275f0 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  t. .**.** All of
27600 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
27610 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
27620 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
27630 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
27640 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
27650 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
27660 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
27670 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
27680 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
27690 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
276a0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
276b0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
276c0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
276d0 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
276e0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
276f0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
27700 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
27710 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27720 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
27730 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
27740 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
27750 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
27760 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
27770 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
27780 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
27790 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
277a0 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
277b0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
277c0 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
277d0 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
277e0 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
277f0 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69  IDE  0x02  /* Mi
27800 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
27810 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a  okaside memory *
27820 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
27830 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
27840 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
27850 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
27860 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
27870 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
27880 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
27890 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
278a0 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20  ne MEMTYPE_DB   
278b0 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55        0x10  /* U
278c0 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  ses sqlite3DbMal
278d0 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f  loc, not sqlite_
278e0 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  malloc */../*.**
278f0 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
27900 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
27910 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
27920 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
27930 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
27940 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
27950 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
27960 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
27970 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
27980 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
27990 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  **);.#endif..#en
279a0 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e  dif /* _SQLITEIN
279b0 54 5f 48 5f 20 2a 2f 0a                          T_H_ */.