/ Hex Artifact Content
Login

Artifact e9030816d5ee6fe2063553b40359096f994664ee:


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 69 6e 74 66 41 72 67 75  truct PrintfArgu
6ee0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
6ef0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
6f00: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
6f10: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
6f20: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
6f30: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
6f40: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
6f50: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
6f60: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
6f70: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
6f80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6f90: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
6fa0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
6fb0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
6fc0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
6fd0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
6fe0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
6ff0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
7000: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
7010: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
7020: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
7030: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7040: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7050: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
7060: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
7070: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
7080: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
7090: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
70a0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
70b0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
70c0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
70d0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
70e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
70f0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
7100: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
7110: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
7120: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
7130: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
7140: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
7150: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
7160: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7170: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
7180: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
7190: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
71a0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
71b0: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
71c0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
71d0: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
71e0: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
71f0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
7200: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
7210: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
7220: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
7230: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
7240: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
7250: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
7260: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
7270: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
7280: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
7290: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
72a0: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
72b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
72c0: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
72d0: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
72e0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
72f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7300: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
7310: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
7320: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
7330: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
7340: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
7350: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
7360: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7370: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
7380: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
7390: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
73a0: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
73b0: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
73c0: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
73d0: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
73e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
73f0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
7400: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
7410: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
7420: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
7430: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
7440: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
7450: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
7460: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
7470: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
7480: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
7490: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
74a0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
74b0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
74c0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
74d0: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
74e0: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
74f0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
7500: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7510: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7520: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
7530: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
7540: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
7550: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
7560: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
7570: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
7580: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
7590: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
75a0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
75b0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
75c0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
75d0: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
75e0: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
75f0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
7600: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
7610: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
7620: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
7630: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
7640: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
7650: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
7660: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
7670: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
7680: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
7690: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
76a0: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
76b0: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
76c0: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
76d0: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
76e0: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
76f0: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
7700: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
7710: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
7720: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
7730: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
7740: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
7750: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
7760: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
7770: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
7780: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
7790: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
77a0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
77b0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
77c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
77d0: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
77e0: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
77f0: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
7800: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
7810: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
7820: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
7830: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
7840: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
7850: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
7860: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
7870: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
7880: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
7890: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
78a0: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
78b0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
78c0: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
78d0: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
78e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
78f0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
7900: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7910: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
7920: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
7930: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
7940: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7950: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
7960: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
7970: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7980: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
7990: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
79a0: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
79b0: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
79c0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
79d0: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
79e0: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
79f0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
7a00: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
7a10: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
7a20: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
7a30: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
7a40: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
7a50: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
7a60: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
7a70: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
7a80: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
7a90: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
7aa0: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
7ab0: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
7ac0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
7ad0: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
7ae0: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
7af0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
7b00: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
7b10: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
7b20: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
7b30: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
7b40: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
7b50: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
7b60: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
7b70: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
7b80: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
7b90: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
7ba0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7bb0: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7bc0: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
7bd0: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
7be0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
7bf0: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7c00: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7c10: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
7c20: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
7c30: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
7c40: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
7c50: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
7c60: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
7c70: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
7c80: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
7c90: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7ca0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
7cb0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
7cc0: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
7cd0: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
7ce0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
7cf0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
7d00: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
7d10: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
7d20: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
7d30: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
7d40: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
7d50: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
7d60: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
7d70: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
7d80: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
7d90: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
7da0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
7db0: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
7dc0: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
7dd0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
7de0: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
7df0: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
7e00: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
7e10: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
7e20: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
7e30: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
7e40: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
7e50: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
7e60: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
7e70: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
7e80: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
7e90: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
7ea0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
7eb0: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
7ec0: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
7ed0: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
7ee0: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
7ef0: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ) */../*.** The 
7f00: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
7f10: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
7f20: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
7f30: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
7f40: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
7f50: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
7f60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
7f70: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
7f80: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
7f90: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
7fa0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
7fb0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
7fc0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
7fd0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
7fe0: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
7ff0: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
8000: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8010: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
8020: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
8030: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
8040: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8050: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
8060: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
8070: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
8080: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
8090: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
80a0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
80b0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
80c0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
80d0: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
80e0: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
80f0: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
8100: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
8110: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
8120: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
8130: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
8140: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
8150: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
8160: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
8170: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
8180: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
8190: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
81a0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
81b0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
81c0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
81d0: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
81e0: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
81f0: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8200: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
8210: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
8220: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
8230: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
8240: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8250: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
8260: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
8270: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
8280: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
8290: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
82a0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
82b0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
82c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
82d0: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
82e0: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
82f0: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
8300: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
8310: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
8320: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
8330: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
8340: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
8350: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
8360: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
8370: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
8380: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
8390: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
83a0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
83b0: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
83c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
83d0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
83e0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
83f0: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
8400: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
8410: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
8420: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
8430: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
8440: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
8450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
8460: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
8470: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
8480: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
8490: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
84a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
84b0: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
84c0: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
84d0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
84e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
84f0: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
8500: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
8510: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
8520: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
8530: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
8540: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
8550: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
8560: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
8570: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
8580: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
8590: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
85a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
85b0: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
85c0: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
85d0: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
85e0: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
85f0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
8600: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
8610: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
8620: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8630: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
8640: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
8650: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
8660: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
8670: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
8680: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
8690: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
86a0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
86b0: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
86c0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
86d0: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
86e0: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
86f0: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
8700: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
8710: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
8720: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
8730: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
8740: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
8750: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
8760: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
8770: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64  ions */.};..#ifd
8780: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
8790: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a  UTHENTICATION./*
87a0: 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** Information 
87b0: 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c  held in the "sql
87c0: 69 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63  ite3" database c
87d0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
87e0: 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
87f0: 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68  manage user auth
8800: 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74  entication..*/.t
8810: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71  ypedef struct sq
8820: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73  lite3_userauth s
8830: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b  qlite3_userauth;
8840: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f  .struct sqlite3_
8850: 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20  userauth {.  u8 
8860: 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20  authLevel;      
8870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
8880: 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61  rrent authentica
8890: 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  tion level */.  
88a0: 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20  int nAuthPW;    
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
88c0: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75   Size of the zAu
88d0: 74 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f  thPW in bytes */
88e0: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57  .  char *zAuthPW
88f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8900: 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65   /* Password use
8910: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8920: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  e */.  char *zAu
8930: 74 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  thUser;         
8940: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d       /* User nam
8950: 65 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  e used to authen
8960: 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ticate */.};../*
8970: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8980: 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72  for sqlite3_user
8990: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a  auth.authLevel *
89a0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
89b0: 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20  Unknown     0   
89c0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
89d0: 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63  ion not yet chec
89e0: 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ked */.#define U
89f0: 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20  AUTH_Fail       
8a00: 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61   1     /* User a
8a10: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
8a20: 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iled */.#define 
8a30: 55 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20  UAUTH_User      
8a40: 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65    2     /* Authe
8a50: 6e 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f  nticated as a no
8a60: 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65  rmal user */.#de
8a70: 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e  fine UAUTH_Admin
8a80: 20 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20         3     /* 
8a90: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
8aa0: 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f   an administrato
8ab0: 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f  r */../* Functio
8ac0: 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20  ns used only by 
8ad0: 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69  user authorizati
8ae0: 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20  on logic */.int 
8af0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54  sqlite3UserAuthT
8b00: 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  able(const char*
8b10: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  );.int sqlite3Us
8b20: 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e  erAuthCheckLogin
8b30: 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
8b40: 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64  char*,u8*);.void
8b50: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
8b60: 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  Init(sqlite3*);.
8b70: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70  void sqlite3Cryp
8b80: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
8b90: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
8ba0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65  e3_value**);..#e
8bb0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
8bc0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8bd0: 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70  ON */../*.** typ
8be0: 65 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74  edef for the aut
8bf0: 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62  horization callb
8c00: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  ack function..*/
8c10: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
8c20: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
8c30: 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  ON.  typedef int
8c40: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
8c50: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8c60: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
8c70: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ca0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
8cb0: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
8cc0: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
8cd0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
8ce0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8cf0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8d00: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8d30: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
8d40: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  if.../*.** Each 
8d50: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8d60: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
8d70: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
8d80: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
8d90: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
8da0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
8db0: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
8dc0: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
8dd0: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
8de0: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
8df0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
8e00: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
8e10: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
8e20: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
8e30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
8e40: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8e50: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
8e60: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
8e70: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
8e80: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
8e90: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
8ea0: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ec0: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
8ed0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ef0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8f00: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
8f10: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
8f20: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8f40: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
8f50: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
8f60: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
8f70: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
8f80: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
8f90: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
8fa0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
8fb0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
8fe0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
8ff0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
9000: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
9010: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
9020: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
9030: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
9040: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
9050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
9060: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
9070: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
9080: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
9090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
90a0: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
90b0: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
90c0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
90d0: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
90e0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
90f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
9100: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
9110: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
9120: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9140: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
9150: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
9160: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
9170: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
9180: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
9190: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
91a0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
91c0: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
91d0: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
91e0: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
91f0: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9210: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9220: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9230: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9240: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
9250: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
9260: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
9270: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
9280: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
9290: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
92a0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
92b0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
92c0: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
92d0: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
92e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
92f0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9300: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9310: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9320: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9330: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9340: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
9350: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
9360: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
9370: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
9380: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
9390: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
93a0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
93b0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
93c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
93d0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
93e0: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
93f0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
9400: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
9410: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9420: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
9430: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
9440: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
9450: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
9460: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
9470: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
9480: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
9490: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
94a0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
94b0: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
94c0: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
94d0: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
94e0: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
94f0: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
9500: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
9510: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
9520: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
9530: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
9540: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
9550: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
9560: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
9570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
9580: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
9590: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
95a0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95c0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
95d0: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
95e0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
95f0: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9610: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
9620: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
9630: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
9640: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
9650: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
9660: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
9670: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
9680: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
9690: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
96a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
96b0: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
96c0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
96d0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
96e0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
96f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9700: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9710: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
9720: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
9730: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
9740: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9750: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9760: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
9770: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
9780: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
9790: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
97a0: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
97b0: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
97c0: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
97e0: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
97f0: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
9800: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
9810: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
9820: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
9830: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
9840: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
9850: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
9860: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
9870: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
9880: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
9890: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
98c0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
98d0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
98e0: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
98f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
9900: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
9910: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
9920: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
9930: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9940: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9950: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
9960: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9970: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9990: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
99a0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
99b0: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
99c0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
99d0: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
99e0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
99f0: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9a00: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9a20: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
9a30: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
9a40: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
9a50: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
9a60: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
9a70: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
9a80: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
9a90: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
9aa0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
9ab0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
9ac0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
9ad0: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
9ae0: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65  e_int64);.#ifnde
9af0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
9b00: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
9b10: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
9b20: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
9b30: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
9b40: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
9b50: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
9b60: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
9b70: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
9b80: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
9b90: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
9ba0: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
9bb0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
9bc0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
9bd0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
9be0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
9bf0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
9c00: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
9c10: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
9c20: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
9c30: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
9c40: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
9c50: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
9c60: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
9c70: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
9c80: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
9c90: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
9ca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
9cb0: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
9cc0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
9cd0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
9ce0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
9cf0: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
9d00: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9d10: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9d20: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
9d30: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
9d40: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
9d50: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
9d60: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9d70: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
9d80: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
9d90: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
9da0: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
9db0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
9dc0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9dd0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9de0: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
9df0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
9e00: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
9e10: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
9e20: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
9e30: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
9e40: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9e50: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
9e60: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
9e70: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
9e80: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
9e90: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
9ea0: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
9eb0: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
9ec0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9ed0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
9ee0: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f00: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
9f10: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
9f20: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f40: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
9f50: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
9f60: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
9f70: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
9f80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
9f90: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
9fa0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
9fb0: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
9fc0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
9fd0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
9fe0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
9ff0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
a000: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
a010: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
a020: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
a030: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
a040: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
a050: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
a060: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
a070: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
a080: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
a090: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
a0a0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0c0: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
a0d0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
a0e0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
a0f0: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
a100: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
a110: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
a120: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
a130: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
a140: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
a150: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
a160: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
a170: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
a180: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
a190: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
a1a0: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a1c0: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
a1d0: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
a1e0: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
a1f0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
a200: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a210: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
a220: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
a230: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a250: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
a260: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a270: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
a280: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
a290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a2a0: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
a2b0: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
a2c0: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
a2d0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
a2e0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
a2f0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
a300: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
a310: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
a320: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
a330: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
a340: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
a350: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
a360: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
a370: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
a380: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
a390: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
a3a0: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
a3b0: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
a3c0: 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a  TIC_MASTER .  **
a3d0: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
a3e0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
a3f0: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
a400: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
a410: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e   .  **.  ** When
a420: 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63   X.pUnlockConnec
a430: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
a440: 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61  ans that X is wa
a450: 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20  iting for Y to. 
a460: 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68   ** unlock so th
a470: 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65  at it can procee
a480: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  d..  **.  ** Whe
a490: 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  n X.pBlockingCon
a4a0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
a4b0: 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65   means that some
a4c0: 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69  thing that X tri
a4d0: 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f  ed.  ** tried to
a4e0: 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69   do recently fai
a4f0: 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49  led with an SQLI
a500: 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20  TE_LOCKED error 
a510: 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a  due to locks.  *
a520: 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a  * held by Y..  *
a530: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c  /.  sqlite3 *pBl
a540: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
a550: 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20  ; /* Connection 
a560: 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49  that caused SQLI
a570: 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73  TE_LOCKED */.  s
a580: 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43  qlite3 *pUnlockC
a590: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20  onnection;      
a5a0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
a5b0: 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20  on to watch for 
a5c0: 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  unlock */.  void
a5d0: 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20   *pUnlockArg;   
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5f0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a600: 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a   xUnlockNotify *
a610: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f  /.  void (*xUnlo
a620: 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a  ckNotify)(void *
a630: 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c  *, int);  /* Unl
a640: 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62  ock notify callb
a650: 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ack */.  sqlite3
a660: 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20   *pNextBlocked; 
a670: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
a680: 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c  n list of all bl
a690: 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ocked connection
a6a0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  s */.#endif.#ifd
a6b0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a6c0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a6d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
a6e0: 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a   auth;        /*
a6f0: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
a700: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
a710: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
a720: 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20  *.** A macro to 
a730: 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63  discover the enc
a740: 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62  oding of a datab
a750: 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ase..*/.#define 
a760: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
a770: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
a780: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
a790: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
a7a0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
a7b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a7c0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
a7d0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
a7e0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
a7f0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
a800: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a810: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
a820: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
a830: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
a840: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
a850: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a860: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
a870: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
a880: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
a890: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
a8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
a8b0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
a8c0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
a8d0: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
a8e0: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
a8f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
a900: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
a910: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
a920: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
a930: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
a940: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
a950: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
a960: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
a970: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
a980: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
a990: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
a9a0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
a9b0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
a9c0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
a9d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
a9e0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
a9f0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
aa00: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
aa10: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa40: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
aa50: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
aa60: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
aaa0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
aab0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
aac0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
aad0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
aae0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
aaf0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
ab00: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab30: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
ab40: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
ab50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ab60: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
ab70: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
ab80: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
ab90: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
aba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
abb0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
abc0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
abd0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
abe0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
abf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
ac00: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
ac10: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
ac20: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
ac30: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
ac40: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
ac50: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
ac60: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
ac70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
ac80: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
ac90: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
aca0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
acb0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
acc0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
acd0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
ace0: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
acf0: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
ad00: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
ad10: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
ad20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
ad30: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
ad40: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
ad50: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
ad60: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
ad70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ad80: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
ad90: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
ada0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
adb0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
adc0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
add0: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
ade0: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
adf0: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
ae00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
ae10: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
ae20: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
ae30: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
ae40: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
ae50: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
ae60: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
ae70: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
ae80: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
ae90: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
aea0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
aeb0: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
aec0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
aed0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
aee0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aef0: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
af00: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
af10: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
af20: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
af30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
af40: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
af50: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
af60: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
af70: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
af80: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
af90: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
afa0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
afb0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
afc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
afd0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
afe0: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
aff0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
b000: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b010: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
b020: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
b030: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
b040: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
b050: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b060: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
b070: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
b080: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
b090: 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  Y PLAN */.../*.*
b0a0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
b0b0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
b0c0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
b0d0: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
b0e0: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
b0f0: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
b100: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
b110: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
b120: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
b130: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
b140: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
b150: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b160: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
b170: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
b180: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
b190: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b1a0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
b1b0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
b1c0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
b1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
b1e0: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
b1f0: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
b200: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
b210: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b220: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
b230: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
b240: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
b250: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
b260: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
b270: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
b280: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
b290: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
b2a0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
b2b0: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
b2c0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
b2d0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
b2e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
b2f0: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
b300: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
b310: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
b320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
b330: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
b340: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
b350: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
b360: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
b370: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
b380: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
b390: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
b3a0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
b3b0: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
b3c0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
b3d0: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
b3e0: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
b3f0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
b400: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
b410: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
b420: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
b430: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
b440: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b450: 54 45 5f 53 74 61 74 33 20 20 20 20 20 20 20 20  TE_Stat3        
b460: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
b470: 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 41  e the SQLITE_STA
b480: 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  T3 table */.#def
b490: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
b4a0: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
b4b0: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
b4c0: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
b4d0: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
b4e0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
b4f0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
b500: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
b510: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
b520: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b530: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
b540: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
b550: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
b560: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
b570: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
b580: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
b590: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
b5a0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
b5b0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
b5c0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c  &(mask))==0).#el
b5d0: 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  se.#define Optim
b5e0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
b5f0: 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65  db, mask)  0.#de
b600: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
b610: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
b620: 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  k)   1.#endif../
b630: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
b640: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
b650: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
b660: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
b670: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
b680: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
b690: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
b6a0: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
b6b0: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
b6c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
b6d0: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
b6e0: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
b6f0: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
b700: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
b710: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
b720: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
b730: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
b740: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
b750: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
b760: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
b770: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
b780: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
b790: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
b7a0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
b7b0: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
b7c0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
b7d0: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
b7e0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
b7f0: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
b800: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
b810: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
b820: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
b830: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
b840: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
b850: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
b860: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
b870: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
b880: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
b890: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
b8a0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
b8b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b8c0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
b8d0: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
b8e0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
b8f0: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
b900: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b910: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
b920: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
b930: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
b940: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
b950: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
b960: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
b970: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
b980: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
b990: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
b9a0: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
b9b0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
b9c0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
b9d0: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
b9e0: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
b9f0: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
ba00: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
ba10: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
ba20: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
ba30: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
ba40: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
ba50: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
ba60: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
ba70: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
ba80: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ba90: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
baa0: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
bab0: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
bac0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
bad0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
bae0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
baf0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
bb00: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
bb10: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
bb20: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
bb30: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
bb40: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
bb50: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
bb60: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
bb70: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
bb80: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
bb90: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
bba0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
bbb0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
bbc0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
bbd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
bbe0: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
bbf0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
bc00: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
bc10: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc30: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
bc40: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
bc50: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
bc60: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
bc70: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
bc80: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
bc90: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
bca0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
bcb0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
bcc0: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
bcd0: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
bce0: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
bcf0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
bd00: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
bd10: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
bd20: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
bd30: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
bd40: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
bd50: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
bd60: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
bd70: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
bd80: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
bd90: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
bda0: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
bdb0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
bdc0: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
bdd0: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
bde0: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
bdf0: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
be00: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
be10: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
be20: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
be30: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
be40: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
be50: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
be60: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
be70: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
be80: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
be90: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
bea0: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
beb0: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
bec0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
bed0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
bee0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
bef0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
bf00: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
bf10: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
bf20: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
bf30: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
bf40: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
bf50: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
bf60: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
bf70: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
bf80: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
bf90: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
bfa0: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
bfb0: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
bfc0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
bfd0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
bfe0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
bff0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
c000: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
c010: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
c020: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
c030: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
c040: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
c050: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
c060: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
c070: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
c080: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
c090: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
c0a0: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
c0b0: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
c0c0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
c0d0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
c0e0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
c0f0: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
c100: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
c110: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
c120: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
c130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c140: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
c150: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
c160: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
c170: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
c180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c190: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
c1a0: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
c1b0: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
c1c0: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
c1d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c1e0: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38  C_CASE     0x008
c1f0: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
c200: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
c210: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c220: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
c230: 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45  EM    0x010 /* E
c240: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
c250: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
c260: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c270: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32  NC_NEEDCOLL 0x02
c280: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
c290: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
c2a0: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
c2b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c2c0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
c2d0: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
c2e0: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
c2f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c300: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
c310: 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d   0x080 /* Built-
c320: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
c330: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c340: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
c350: 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75  T    0x100 /* Bu
c360: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
c370: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
c380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c390: 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20  _COALESCE 0x200 
c3a0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
c3b0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
c3c0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
c3d0: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
c3e0: 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c  LY 0x400 /* Buil
c3f0: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
c400: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c410: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c420: 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f  CONSTANT 0x800 /
c430: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
c440: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
c450: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a  t output */../*.
c460: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
c470: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
c480: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
c490: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
c4a0: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
c4b0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
c4c0: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
c4d0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
c4e0: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
c4f0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
c500: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
c510: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
c520: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
c530: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
c540: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
c550: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
c560: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
c570: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
c580: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
c590: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
c5a0: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
c5b0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
c5c0: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
c5d0: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
c5e0: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
c5f0: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
c600: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
c610: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
c620: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20  he function. If 
c630: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
c640: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
c650: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
c660: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
c670: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
c680: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
c690: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
c6a0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
c6b0: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
c6c0: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
c6d0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
c6e0: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
c6f0: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
c700: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
c710: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
c720: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
c730: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
c740: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
c750: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
c760: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
c770: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
c780: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
c790: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
c7a0: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
c7b0: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
c7c0: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
c7d0: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
c7e0: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
c7f0: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
c800: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
c810: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
c820: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
c830: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
c840: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
c850: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
c860: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
c870: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
c880: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
c890: 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
c8a0: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
c8b0: 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a  by a call to C .
c8c0: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
c8d0: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
c8e0: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
c8f0: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
c900: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
c910: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
c920: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
c930: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
c940: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
c950: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
c960: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
c970: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
c980: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
c990: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
c9a0: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
c9b0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
c9c0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
c9d0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
c9e0: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
c9f0: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
ca00: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
ca10: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
ca20: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ca30: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ca40: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ca50: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ca60: 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
ca70: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
ca80: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
ca90: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
caa0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
cab0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
cac0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
cad0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
cae0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
caf0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
cb00: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
cb10: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
cb20: 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
cb30: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
cb40: 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
cb50: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
cb60: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
cb70: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
cb80: 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
cb90: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
cba0: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
cbb0: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
cbc0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54  0, 0}.#define ST
cbd0: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
cbe0: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
cbf0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
cc00: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
cc10: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
cc20: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
cc30: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
cc40: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
cc50: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
cc60: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
cc70: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
cc80: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
cc90: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
cca0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
ccb0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
ccc0: 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
ccd0: 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
cce0: 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  eFunc, 0, 0, #zN
ccf0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
cd00: 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
cd10: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
cd20: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
cd30: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
cd40: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
cd50: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
cd60: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
cd70: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
cd80: 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69   0, 0, xStep,xFi
cd90: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a  nal,#zName,0,0}.
cda0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
cdb0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
cdc0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
cdd0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
cde0: 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
cdf0: 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
ce00: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
ce10: 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
ce20: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
ce30: 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
ce40: 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
ce50: 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
ce60: 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
ce70: 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
ce80: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
ce90: 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
cea0: 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
ceb0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
cec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
ced0: 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
cee0: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
cef0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
cf00: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
cf10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
cf20: 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
cf30: 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
cf40: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
cf50: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
cf60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
cf70: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b   deferred imm fk
cf80: 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  . */.  Savepoint
cf90: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
cfa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
cfb0: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
cfc0: 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
cfd0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
cfe0: 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
cff0: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
d000: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
d010: 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
d020: 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
d030: 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
d040: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
d050: 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
d060: 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
d070: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
d080: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
d090: 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
d0a0: 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
d0b0: 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
d0c0: 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
d0d0: 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
d0e0: 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
d0f0: 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
d100: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
d110: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
d120: 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
d130: 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
d140: 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
d150: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
d160: 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
d170: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
d180: 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
d190: 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
d1a0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
d1b0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
d1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
d1d0: 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
d1e0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
d1f0: 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
d220: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
d230: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
d240: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
d250: 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
d260: 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
d270: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
d280: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
d290: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
d2a0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
d2b0: 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
d2c0: 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
d2d0: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
d2e0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
d2f0: 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
d300: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
d310: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
d320: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20  olumn */.  Expr 
d330: 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
d340: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
d350: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
d360: 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20   char *zDflt;   
d370: 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
d380: 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  xt of the defaul
d390: 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61  t value */.  cha
d3a0: 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a  r *zType;     /*
d3b0: 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74   Data type for t
d3c0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
d3d0: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
d3e0: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
d3f0: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
d400: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
d410: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
d420: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
d430: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
d440: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
d450: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
d460: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
d470: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
d480: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
d490: 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
d4a0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
d4b0: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74  imated size of t
d4c0: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54  his column.  INT
d4d0: 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
d4e0: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
d4f0: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
d500: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
d510: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
d520: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
d530: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
d540: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
d550: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
d560: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
d570: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
d580: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
d590: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
d5a0: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
d5b0: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
d5c0: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
d5d0: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
d5e0: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
d5f0: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
d600: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
d610: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
d620: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
d630: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
d640: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
d650: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
d660: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
d670: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
d680: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
d690: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
d6a0: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
d6b0: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
d6c0: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
d6d0: 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
d6e0: 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
d6f0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
d700: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
d710: 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
d720: 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
d730: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d740: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
d750: 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
d760: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
d770: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d780: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
d790: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
d7a0: 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
d7b0: 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
d7c0: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
d7d0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
d7e0: 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
d7f0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
d800: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
d810: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
d820: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
d830: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
d840: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
d850: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
d860: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
d870: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
d880: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
d890: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
d8a0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
d8b0: 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
d8c0: 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
d8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d8e0: 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
d8f0: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
d900: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
d910: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d920: 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
d930: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
d940: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a  ing order */../*
d950: 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e  .** Column affin
d960: 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a  ity types..**.**
d970: 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68   These used to h
d980: 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d  ave mnemonic nam
d990: 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53  e like 'i' for S
d9a0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
d9b0: 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72  R and.** 't' for
d9c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
d9d0: 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61  .  But we can sa
d9e0: 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63  ve a little spac
d9f0: 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a  e and improve.**
da00: 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74   the speed a lit
da10: 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67  tle by numbering
da20: 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73   the values cons
da30: 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a  ecutively.  .**.
da40: 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
da50: 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
da60: 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
da70: 69 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77  ith 'a'.  That w
da80: 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
da90: 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
daa0: 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
dab0: 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
dac0: 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
dad0: 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
dae0: 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
daf0: 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
db00: 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
db10: 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
db20: 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
db30: 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
db40: 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
db50: 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
db60: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
db70: 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  arison..*/.#defi
db80: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
db90: 58 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69  XT     'a'.#defi
dba0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
dbb0: 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69  NE     'b'.#defi
dbc0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
dbd0: 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69  MERIC  'c'.#defi
dbe0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
dbf0: 54 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69  TEGER  'd'.#defi
dc00: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
dc10: 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66  AL     'e'..#def
dc20: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
dc30: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
dc40: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
dc50: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
dc60: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
dc70: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
dc80: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
dc90: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
dca0: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
dcb0: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
dcc0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
dcd0: 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a       0x67../*.**
dce0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
dcf0: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
dd00: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
dd10: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
dd20: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
dd30: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
dd40: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
dd50: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
dd60: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
dd70: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
dd80: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
dd90: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
dda0: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
ddb0: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
ddc0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
ddd0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
dde0: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
ddf0: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
de00: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
de10: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
de20: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
de30: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
de40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
de50: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20  MPIFNULL   0x08 
de60: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
de70: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
de80: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
de90: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
dea0: 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72     0x10  /* Stor
deb0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
dec0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
ded0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
dee0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
def0: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
df00: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
df10: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
df20: 20 20 20 20 20 20 30 78 38 38 20 20 2f 2a 20 41        0x88  /* A
df30: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
df40: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
df50: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
df60: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
df70: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
df80: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
df90: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
dfa0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
dfb0: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
dfc0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
dfd0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
dfe0: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
dff0: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
e000: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
e010: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
e020: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
e030: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
e040: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
e050: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
e060: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
e070: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e080: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
e090: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
e0a0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
e0b0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
e0c0: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
e0d0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
e0e0: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
e0f0: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
e100: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
e110: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
e120: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
e130: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
e140: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
e150: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
e160: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
e170: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
e180: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
e190: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
e1a0: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
e1b0: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
e1c0: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
e1d0: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
e1e0: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
e1f0: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
e200: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
e210: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
e220: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
e230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
e240: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
e250: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
e260: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
e270: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
e280: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
e290: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
e2a0: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
e2b0: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
e2c0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
e2d0: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
e2e0: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
e2f0: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
e300: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
e310: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
e320: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
e330: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
e340: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
e350: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
e360: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
e370: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
e380: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
e390: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
e3a0: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
e3b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
e3c0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
e3d0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
e3e0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
e3f0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
e400: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
e410: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
e420: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
e430: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
e440: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
e450: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
e460: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
e470: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
e480: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
e490: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
e4a0: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
e4b0: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
e4c0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
e4d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
e4e0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
e4f0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
e500: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
e510: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
e520: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
e530: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
e540: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
e550: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
e560: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
e570: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
e580: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
e590: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
e5a0: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
e5b0: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
e5c0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
e5d0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
e5e0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
e5f0: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
e600: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
e610: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
e620: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
e630: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
e640: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
e650: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
e660: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
e670: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
e680: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
e690: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
e6a0: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
e6b0: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
e6c0: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
e6d0: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
e6e0: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
e6f0: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
e700: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
e710: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
e720: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
e730: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
e740: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
e750: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
e760: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
e770: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
e780: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
e790: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
e7a0: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
e7b0: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
e7c0: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
e7d0: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
e7e0: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
e7f0: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
e800: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
e810: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
e820: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
e830: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
e840: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
e850: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
e860: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
e870: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
e880: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
e890: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
e8a0: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
e8b0: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
e8c0: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
e8d0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
e8e0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
e8f0: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
e900: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
e910: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
e920: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
e930: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
e940: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
e950: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
e960: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
e970: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
e980: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
e990: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
e9a0: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
e9b0: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
e9c0: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
e9d0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
e9e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e9f0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
ea00: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
ea10: 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
ea20: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ea30: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
ea40: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
ea50: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
ea60: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
ea70: 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
ea80: 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
ea90: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
eaa0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
eab0: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
eac0: 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
ead0: 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
eae0: 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69  Each SQL table i
eaf0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
eb00: 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e   memory by an in
eb10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a  stance of the.**
eb20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
eb30: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  ture..**.** Tabl
eb40: 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e  e.zName is the n
eb50: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
eb60: 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66 20 74  .  The case of t
eb70: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43  he original.** C
eb80: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
eb90: 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c  ement is stored,
eba0: 20 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74   but case is not
ebb0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72   significant for
ebc0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  .** comparisons.
ebd0: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f  .**.** Table.nCo
ebe0: 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  l is the number 
ebf0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
ec00: 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65  is table.  Table
ec10: 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f  .aCol is a.** po
ec20: 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61  inter to an arra
ec30: 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75  y of Column stru
ec40: 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20  ctures, one for 
ec50: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a  each column..**.
ec60: 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
ec70: 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50  has an INTEGER P
ec80: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
ec90: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
eca0: 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20  the index of.** 
ecb0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  the column that 
ecc0: 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f  is that key.   O
ecd0: 74 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69  therwise Table.i
ece0: 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76 65  PKey is negative
ecf0: 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20  .  Note.** that 
ed00: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
ed10: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
ed20: 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45 52 20  must be INTEGER 
ed30: 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20 74  for this field t
ed40: 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e  o.** be set.  An
ed50: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
ed60: 20 4b 45 59 20 69 73 20 75 73 65 64 20 61 73 20   KEY is used as 
ed70: 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61  the rowid for ea
ed80: 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65  ch row of.** the
ed90: 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61   table.  If a ta
eda0: 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47  ble has no INTEG
edb0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
edc0: 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f  then a random ro
edd0: 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61  wid.** is genera
ede0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
edf0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
ee00: 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
ee10: 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68   is set if.** th
ee20: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20  e table has any 
ee30: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54  PRIMARY KEY, INT
ee40: 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73  EGER or otherwis
ee50: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74  e..**.** Table.t
ee60: 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67 65 20  num is the page 
ee70: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72  number for the r
ee80: 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 6f  oot BTree page o
ee90: 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74  f the table in t
eea0: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  he.** database f
eeb0: 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69  ile.  If Table.i
eec0: 44 62 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  Db is the index 
eed0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
eee0: 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a  table backend.**
eef0: 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d   in sqlite.aDb[]
ef00: 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68 65 20  .  0 is for the 
ef10: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e  main database an
ef20: 64 20 31 20 69 73 20 66 6f 72 20 74 68 65 20 66  d 1 is for the f
ef30: 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64  ile that.** hold
ef40: 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  s temporary tabl
ef50: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20  es and indices. 
ef60: 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c   If TF_Ephemeral
ef70: 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20   is set.** then 
ef80: 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f  the table is sto
ef90: 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68  red in a file th
efa0: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
efb0: 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77  lly deleted.** w
efc0: 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75 72  hen the VDBE cur
efd0: 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65  sor to the table
efe0: 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20   is closed.  In 
eff0: 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e  this case Table.
f000: 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20  tnum .** refers 
f010: 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
f020: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
f030: 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f  e table open, no
f040: 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a  t to the root.**
f050: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54   page number.  T
f060: 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20  ransient tables 
f070: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
f080: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
f090: 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74  a.** sub-query t
f0a0: 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73 74  hat appears inst
f0b0: 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61  ead of a real ta
f0c0: 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20  ble name in the 
f0d0: 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20  FROM clause .** 
f0e0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
f0f0: 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
f100: 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
f110: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f120: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
f130: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
f140: 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
f150: 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
f160: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
f170: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
f180: 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
f190: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
f1a0: 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
f1b0: 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
f1c0: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
f1d0: 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
f1e0: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
f1f0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
f200: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
f210: 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
f220: 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
f230: 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
f240: 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
f250: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
f260: 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
f270: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
f280: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
f290: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69  ach column */.#i
f2a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f2b0: 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69  T_CHECK.  ExprLi
f2c0: 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
f2d0: 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
f2e0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69  traints */.#endi
f2f0: 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  f.  LogEst nRowL
f300: 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
f310: 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
f320: 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
f330: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
f340: 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
f350: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
f360: 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74  BTree node for t
f370: 68 69 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e  his table (see n
f380: 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  ote above) */.  
f390: 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
f3a0: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
f3b0: 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
f3c0: 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
f3d0: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20  primary key */. 
f3e0: 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20   i16 nCol;      
f3f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f400: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f410: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31  is table */.  u1
f420: 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  6 nRef;         
f430: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f440: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
f450: 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   Table */.  LogE
f460: 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
f470: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f480: 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
f490: 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
f4a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f4b0: 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
f4c0: 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
f4d0: 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
f4e0: 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
f4f0: 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
f500: 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62  .#endif.  u8 tab
f510: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
f520: 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
f530: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65  alues */.  u8 ke
f540: 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
f550: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
f560: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
f570: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
f580: 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
f590: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
f5a0: 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
f5b0: 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
f5c0: 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
f5d0: 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
f5e0: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
f5f0: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
f600: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
f610: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
f620: 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
f630: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f640: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
f650: 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
f660: 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
f670: 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c  ;  /* Text of al
f680: 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b  l module args. [
f690: 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d  0] is module nam
f6a0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  e */.  VTable *p
f6b0: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
f6c0: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
f6d0: 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
f6e0: 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
f6f0: 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
f700: 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
f710: 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
f720: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
f730: 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
f740: 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
f750: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
f760: 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
f770: 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
f780: 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
f790: 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
f7a0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
f7b0: 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
f7c0: 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  tabFlags..*/.#de
f7d0: 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
f7e0: 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
f7f0: 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
f800: 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
f810: 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
f820: 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
f830: 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
f840: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
f850: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
f860: 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
f870: 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
f880: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
f890: 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
f8a0: 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
f8b0: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
f8c0: 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
f8d0: 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
f8e0: 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
f8f0: 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
f900: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
f910: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
f920: 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
f930: 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
f940: 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59  id used. PRIMARY
f950: 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
f960: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
f970: 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
f980: 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
f990: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
f9a0: 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
f9b0: 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
f9c0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
f9d0: 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
f9e0: 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
f9f0: 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
fa00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
fa10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
fa20: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
fa30: 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
fa40: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
fa50: 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
fa60: 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
fa70: 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66  tual)!=0).#  def
fa80: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
fa90: 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
faa0: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
fab0: 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73  HIDDEN)!=0).#els
fac0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
fad0: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
fae0: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
faf0: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
fb00: 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  ndif../* Does th
fb10: 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
fb20: 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
fb30: 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
fb40: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
fb50: 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
fb60: 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
fb70: 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
fb80: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
fb90: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
fba0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
fbb0: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
fbc0: 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
fbd0: 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
fbe0: 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
fbf0: 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
fc00: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
fc10: 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
fc20: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
fc30: 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
fc40: 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
fc50: 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
fc60: 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
fc70: 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
fc80: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
fc90: 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
fca0: 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
fcb0: 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
fcc0: 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
fcd0: 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
fce0: 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
fcf0: 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
fd00: 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
fd10: 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
fd20: 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
fd30: 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
fd40: 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
fd50: 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
fd60: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
fd70: 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
fd80: 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
fd90: 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
fda0: 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
fdb0: 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
fdc0: 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
fdd0: 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
fde0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
fdf0: 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
fe00: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
fe10: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
fe20: 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
fe30: 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
fe40: 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
fe50: 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
fe60: 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
fe70: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
fe80: 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
fe90: 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
fea0: 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
feb0: 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
fec0: 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
fed0: 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
fee0: 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
fef0: 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
ff00: 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
ff10: 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
ff20: 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
ff30: 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
ff40: 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
ff50: 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
ff60: 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
ff70: 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
ff80: 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
ff90: 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
ffa0: 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
ffb0: 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
ffc0: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
ffd0: 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
ffe0: 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
fff0: 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
10000 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
10010 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
10020 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
10030 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
10040 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
10050 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
10060 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
10070 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
10080 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
10090 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
100a0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
100b0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
100c0 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
100d0 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
100e0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
100f0 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
10100 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10110 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10120 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
10130 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
10140 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
10150 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
10160 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
10170 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
10180 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
10190 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
101a0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
101b0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
101c0 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
101d0 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
101e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
101f0 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
10200 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
10210 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
10220 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
10230 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
10240 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
10250 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
10260 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
10270 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
10280 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
10290 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
102a0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
102b0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
102c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
102d0 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
102e0 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
102f0 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
10300 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
10310 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
10320 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
10330 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
10340 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
10350 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
10360 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
10370 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
10380 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
10390 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
103a0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
103b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
103c0 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
103d0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
103e0 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
103f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
10400 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
10410 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
10420 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
10430 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
10440 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
10450 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
10460 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
10470 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
10480 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
10490 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
104a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
104b0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
104c0 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
104d0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
104e0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
104f0 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
10500 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
10510 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
10520 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
10530 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
10540 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
10550 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
10560 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
10570 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
10580 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
10590 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
105a0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
105b0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
105c0 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
105d0 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
105e0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
105f0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
10600 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
10610 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
10620 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
10630 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
10640 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
10650 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
10660 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
10670 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
10680 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
10690 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
106a0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
106b0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
106c0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
106d0 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
106e0 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
106f0 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
10700 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
10710 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
10720 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
10730 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
10740 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
10750 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
10760 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
10770 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
10780 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
10790 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
107a0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
107b0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
107c0 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
107d0 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
107e0 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
107f0 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
10800 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
10810 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
10820 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
10830 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
10840 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
10850 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
10860 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
10870 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
10880 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
10890 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
108a0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
108b0 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
108c0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
108d0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
108e0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
108f0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
10900 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
10910 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
10920 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
10930 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
10940 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
10950 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
10960 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
10970 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
10980 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
10990 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
109a0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
109b0 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
109c0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
109d0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
109e0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
109f0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
10a00 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
10a10 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
10a20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
10a30 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
10a40 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
10a50 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
10a60 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
10a70 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
10a80 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
10a90 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
10aa0 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
10ab0 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
10ac0 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
10ad0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
10ae0 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
10af0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
10b00 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
10b10 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
10b20 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
10b30 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
10b40 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
10b50 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
10b60 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
10b70 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
10b80 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
10b90 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
10ba0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
10bb0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
10bc0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
10bd0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
10be0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
10bf0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
10c00 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
10c10 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
10c20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
10c30 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
10c40 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
10c50 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
10c60 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
10c70 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
10c80 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
10c90 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
10ca0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
10cb0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
10cc0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
10cd0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
10ce0 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
10cf0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
10d00 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
10d10 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
10d20 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
10d30 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
10d40 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
10d50 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
10d60 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
10d70 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
10d80 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
10d90 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
10da0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
10db0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
10dc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
10dd0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
10de0 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
10df0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
10e00 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
10e10 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
10e20 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
10e30 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
10e40 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
10e50 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
10e60 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
10e70 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
10e80 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
10e90 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
10ea0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
10eb0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
10ec0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
10ed0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
10ee0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
10ef0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10f00 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10f10 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
10f20 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
10f30 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
10f40 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
10f50 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
10f60 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
10f70 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
10f80 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
10f90 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
10fa0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
10fb0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
10fc0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
10fd0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
10fe0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
10ff0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
11000 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
11010 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
11020 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
11030 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
11040 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
11050 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
11060 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
11070 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
11080 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
11090 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
110a0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
110b0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
110c0 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
110d0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
110e0 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
110f0 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
11100 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a  ent fields..**.*
11110 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
11120 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73  member variables
11130 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62   are only used b
11140 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20  y the optimized 
11150 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75  comparison.** fu
11160 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f  nctions vdbeReco
11170 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61  rdCompareInt() a
11180 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d  nd vdbeRecordCom
11190 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f  pareString()..*/
111a0 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
111b0 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
111c0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
111d0 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
111e0 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
111f0 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
11200 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
11210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
11220 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
11230 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
11240 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
11250 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
11260 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
11270 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
11280 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
11290 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
112a0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
112b0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
112c0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
112d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
112e0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20  es */.  int r1; 
112f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
11300 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
11310 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
11320 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20  .  int r2;      
11330 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
11340 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68  to return if (rh
11350 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a  s < lhs) */.};..
11360 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
11370 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
11380 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
11390 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
113a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
113b0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
113c0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
113d0 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
113e0 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
113f0 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
11400 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
11410 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
11420 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
11430 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
11440 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
11450 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
11460 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
11470 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
11480 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
11490 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
114a0 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
114b0 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
114c0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
114d0 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
114e0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
114f0 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
11500 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
11510 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
11520 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
11530 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
11540 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
11550 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
11560 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
11570 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
11580 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
11590 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
115a0 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
115b0 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
115c0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
115d0 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
115e0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
115f0 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
11600 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
11610 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
11620 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
11630 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
11640 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
11650 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
11660 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
11670 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
11680 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
11690 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
116a0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
116b0 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
116c0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
116d0 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
116e0 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
116f0 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
11700 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
11710 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
11720 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
11730 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
11740 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
11750 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
11760 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
11770 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
11780 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
11790 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
117a0 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
117b0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
117c0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
117d0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
117e0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
117f0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
11800 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
11810 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
11820 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
11830 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
11840 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
11850 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11860 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
11870 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
11880 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
11890 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
118a0 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
118b0 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
118c0 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
118d0 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
118e0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
118f0 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
11900 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
11910 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
11920 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
11930 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
11940 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
11950 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
11960 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
11970 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
11980 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
11990 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
119a0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
119b0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
119c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
119d0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
119e0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
119f0 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
11a00 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11a10 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
11a20 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
11a30 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
11a40 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
11a50 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
11a60 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
11a70 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
11a80 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
11a90 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
11aa0 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
11ab0 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
11ac0 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
11ad0 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49 6e  dices */.  KeyIn
11ae0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 20  fo *pKeyInfo;   
11af0 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66 6f      /* A KeyInfo
11b00 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c 65   object suitable
11b10 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
11b20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11b40 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
11b50 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
11b60 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
11b70 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
11b80 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
11b90 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
11ba0 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
11bb0 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
11bc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11bd0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
11be0 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
11bf0 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11c10 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
11c20 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
11c30 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
11c40 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
11c50 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
11c60 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
11c70 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
11c80 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
11c90 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
11ca0 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
11cb0 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
11cc0 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
11cd0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
11ce0 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
11cf0 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
11d00 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
11d10 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
11d20 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
11d30 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
11d40 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
11d50 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
11d60 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
11d70 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
11d80 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
11d90 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
11da0 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
11db0 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
11dc0 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
11dd0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
11de0 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
11df0 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20 53  ndex */.#ifdef S
11e00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
11e10 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
11e20 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
11e30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11e40 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
11e50 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
11e60 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
11e70 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
11e80 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
11e90 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
11ea0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
11eb0 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
11ec0 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
11ed0 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
11ee0 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
11ef0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
11f00 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
11f10 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
11f20 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e  -most key */.#en
11f30 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
11f40 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
11f50 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
11f60 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11f70 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
11f80 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
11f90 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
11fa0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
11fb0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
11fc0 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
11fd0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
11fe0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
11ff0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
12000 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
12010 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
12020 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
12030 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
12040 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74   */../* Return t
12050 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
12060 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  s a PRIMARY KEY 
12070 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
12080 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64   IsPrimaryKeyInd
12090 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78  ex(X)  ((X)->idx
120a0 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58  Type==SQLITE_IDX
120b0 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29  TYPE_PRIMARYKEY)
120c0 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
120d0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
120e0 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f   UNIQUE index */
120f0 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75  .#define IsUniqu
12100 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28  eIndex(X)      (
12110 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  (X)->onError!=OE
12120 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  _None)../*.** Ea
12130 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
12140 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
12150 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
12160 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
12170 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20  ory .** using a 
12180 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
12190 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
121a0 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
121b0 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
121c0 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
121d0 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
121e0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
121f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
12200 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
12210 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
12220 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
12230 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
12240 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
12250 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
12260 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
12270 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
12280 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
12290 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
122a0 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
122b0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
122c0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
122d0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
122e0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
122f0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
12300 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
12310 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
12320 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
12330 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
12340 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
12350 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
12360 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
12370 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
12380 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
12390 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
123a0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
123b0 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
123c0 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
123d0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
123e0 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
123f0 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
12400 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
12410 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
12420 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
12430 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
12440 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
12450 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
12460 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
12470 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
12480 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
12490 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
124a0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
124b0 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
124c0 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
124d0 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
124e0 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
124f0 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
12500 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
12510 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
12520 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
12530 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12540 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
12550 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
12560 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
12570 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
12580 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
12590 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
125a0 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
125b0 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
125c0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
125d0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
125e0 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
125f0 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
12600 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
12610 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
12620 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
12630 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
12640 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
12650 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
12660 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
12670 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
12680 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
12690 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
126a0 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
126b0 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
126c0 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
126d0 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
126e0 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
126f0 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
12700 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
12710 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
12720 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
12730 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
12740 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
12750 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
12760 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
12770 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
12780 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
12790 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
127a0 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
127b0 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
127c0 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
127d0 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
12800 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
12810 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
12820 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
12830 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
12840 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
12850 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
12860 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12870 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
128a0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
128b0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
128c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
128d0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
128e0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
128f0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
12900 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
12910 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
12920 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
12930 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
12940 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
12950 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12960 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
12970 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
12980 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
12990 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
129a0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
129b0 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
129c0 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
129d0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
129e0 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
129f0 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
12a00 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
12a10 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
12a20 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
12a30 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
12a40 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
12a50 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
12a60 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
12a70 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
12a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12a90 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
12aa0 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
12ab0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
12ac0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
12ad0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
12ae0 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
12af0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
12b00 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
12b10 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
12b20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
12b30 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
12b40 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
12b50 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
12b60 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
12b70 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
12b80 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
12b90 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
12ba0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
12bb0 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
12bc0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
12bd0 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
12be0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
12bf0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
12c00 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
12c10 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
12c20 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
12c30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12c40 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
12c50 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
12c60 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
12c90 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
12ca0 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
12cb0 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
12ce0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
12cf0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
12d00 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
12d10 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
12d20 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
12d30 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
12d40 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
12d50 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
12d60 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
12d70 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
12d80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
12d90 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12da0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
12db0 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
12dc0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
12dd0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
12de0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
12df0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
12e00 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
12e10 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
12e20 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
12e30 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
12e40 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
12e50 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
12e60 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
12e70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12e80 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
12e90 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
12ea0 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
12eb0 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
12ec0 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
12ed0 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
12ee0 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
12ef0 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
12f00 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
12f10 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
12f20 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
12f30 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
12f40 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
12f50 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
12f60 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
12f70 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
12f80 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
12f90 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
12fa0 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
12fb0 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
12fc0 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
12fd0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
12fe0 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
12ff0 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
13000 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
13010 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
13020 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
13030 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
13040 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
13050 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
13060 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
13070 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
13080 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
13090 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
130a0 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
130b0 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
130c0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
130d0 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
130e0 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
130f0 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
13100 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
13110 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
13120 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
13130 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
13140 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
13150 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
13160 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
13170 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
13180 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
13190 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
131a0 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
131b0 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
131c0 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
131d0 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
131e0 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
131f0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
13200 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
13210 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
13220 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
13230 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
13240 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
13250 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
13260 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
13270 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
13280 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
13290 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
132a0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
132b0 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
132c0 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
132d0 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
132e0 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54  OB, .** or TK_ST
132f0 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72  RING), then Expr
13300 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
13310 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
13320 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a  SQL literal. If.
13330 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
13340 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  n is a variable 
13350 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74  (TK_VARIABLE), t
13360 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
13370 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20  ontains the .** 
13380 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46  variable name. F
13390 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65  inally, if the e
133a0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
133b0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b  SQL function (TK
133c0 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74  _FUNCTION),.** t
133d0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
133e0 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65  ontains the name
133f0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
13400 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69  ..**.** Expr.pRi
13410 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65  ght and Expr.pLe
13420 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20  ft are the left 
13430 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70  and right subexp
13440 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a  ressions of a.**
13450 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
13460 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68  . Either or both
13470 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a   may be NULL..**
13480 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  .** Expr.x.pList
13490 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72   is a list of ar
134a0 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65  guments if the e
134b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
134c0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a  SQL function,.**
134d0 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69   a CASE expressi
134e0 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72  on or an IN expr
134f0 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
13500 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79  rm "<lhs> IN (<y
13510 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20  >, <z>...)"..** 
13520 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
13530 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78  s used if the ex
13540 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
13550 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65  b-select or an e
13560 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20  xpression of.** 
13570 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
13580 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
13590 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53  . If the EP_xIsS
135a0 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74  elect bit is set
135b0 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
135c0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
135d0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
135e0 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77  is valid. Otherw
135f0 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73  ise, Expr.x.pLis
13600 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a  t is .** valid..
13610 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
13620 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
13630 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
13640 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
13650 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
13660 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
13670 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
13680 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
13690 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
136a0 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
136b0 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
136c0 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
136d0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
136e0 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
136f0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
13700 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
13710 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
13720 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
13730 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
13740 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
13750 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
13760 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
13770 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
13780 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
13790 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
137a0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
137b0 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
137c0 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
137d0 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
137e0 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
137f0 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
13800 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13810 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
13820 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
13830 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a  question mark .*
13840 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
13850 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
13860 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
13870 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
13880 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75  the index .** nu
13890 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
138a0 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
138b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
138c0 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
138d0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
138e0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
138f0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
13900 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
13910 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
13920 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
13930 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
13940 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
13950 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
13960 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
13970 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
13980 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
13990 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
139a0 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
139b0 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
139c0 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
139d0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
139e0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
139f0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
13a00 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
13a10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
13a20 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
13a30 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
13a40 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
13a50 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
13a60 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
13a70 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
13a80 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
13a90 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
13aa0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
13ab0 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
13ac0 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
13ad0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
13ae0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
13af0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
13b00 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
13b10 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
13b20 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
13b30 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
13b40 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
13b50 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
13b60 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
13b70 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
13b80 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
13b90 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
13ba0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
13bb0 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
13bc0 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
13bd0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
13be0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
13bf0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
13c00 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
13c10 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
13c20 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
13c30 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
13c40 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
13c50 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
13c60 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
13c70 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
13c80 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
13c90 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
13ca0 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
13cb0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
13cc0 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
13cd0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
13ce0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
13cf0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
13d00 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
13d10 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
13d20 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
13d30 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
13d40 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
13d50 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
13d60 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
13d70 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
13d80 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
13d90 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
13da0 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
13db0 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
13dc0 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
13dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13de0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
13df0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
13e00 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
13e10 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
13e20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
13e30 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
13e40 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
13e50 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
13e60 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
13e70 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
13e80 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
13e90 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
13ea0 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
13eb0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
13ec0 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
13ed0 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
13ee0 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
13ef0 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
13f00 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
13f10 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
13f20 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
13f30 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
13f40 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
13f50 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
13f60 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
13f70 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
13f80 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
13f90 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
13fa0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
13fb0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
13fc0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
13fd0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
13fe0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
13ff0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
14000 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  ion. .  ********
14010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
14050 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
14060 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
14070 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
14080 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
14090 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
140a0 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
140b0 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
140c0 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
140d0 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
140e0 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
140f0 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
14100 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
14110 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
14120 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
14130 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
14140 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
14150 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
14160 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
14170 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
14180 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
14190 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
141a0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
141b0 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
141c0 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
141d0 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
141e0 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
141f0 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
14200 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
14210 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
14220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
14260 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
14270 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
14280 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
14290 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
142a0 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
142b0 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
142c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
142d0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
142e0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
142f0 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
14300 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
14310 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
14340 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
14350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14360 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
14370 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
14380 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
143b0 65 6c 79 3a 20 20 31 30 30 30 20 74 69 6d 65 73  ely:  1000 times
143c0 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20   likelihood */. 
143d0 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
143e0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
143f0 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
14400 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
14410 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
14420 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
14430 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
14440 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
14450 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
14460 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
14470 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
14480 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
14490 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
144a0 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
144b0 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
144c0 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
144d0 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
144e0 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
144f0 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  n */.  u8 op2;  
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14510 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72   TK_REGISTER: or
14520 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20  iginal value of 
14530 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20  Expr.op.        
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74   ** TK_COLUMN: t
14560 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66  he value of p5 f
14570 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20  or OP_Column.   
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f        ** TK_AGG_
145a0 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e  FUNCTION: nestin
145b0 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67  g depth */.  Agg
145c0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
145d0 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54      /* Used by T
145e0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64  K_AGG_COLUMN and
145f0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
14600 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
14610 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
14620 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c  Table for TK_COL
14630 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  UMN expressions.
14640 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14650 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14660 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
14670 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
14680 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
14690 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
146a0 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
146b0 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20  * Originated in 
146c0 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
146d0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
146e0 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
146f0 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
14700 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
14710 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
14720 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
14730 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
14740 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
14750 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
14760 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
14770 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72  */.#define EP_Er
14780 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38  ror     0x000008
14790 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63   /* Expression c
147a0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
147b0 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ore errors */.#d
147c0 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
147d0 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
147e0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
147f0 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
14800 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
14810 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
14820 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
14830 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
14840 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
14850 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
14860 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
14870 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
14880 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
14890 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
148a0 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
148b0 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
148c0 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
148d0 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
148e0 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
148f0 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
14900 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
14910 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
14920 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
14930 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
14940 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
14950 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
14960 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
14970 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
14980 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
14990 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
149a0 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
149b0 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
149c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
149d0 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
149e0 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
149f0 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
14a00 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
14a10 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
14a20 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
14a30 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
14a40 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
14a50 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
14a60 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
14a70 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
14a80 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
14a90 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
14aa0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
14ab0 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
14ac0 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
14ad0 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
14ae0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
14af0 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
14b00 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
14b10 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
14b20 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
14b30 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
14b40 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
14b50 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
14b60 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
14b70 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
14b80 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
14b90 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
14ba0 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
14bb0 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
14bc0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
14bd0 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
14be0 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
14bf0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
14c00 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
14c10 65 20 45 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30  e EP_Constant  0
14c20 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20  x080000 /* Node 
14c30 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f  is a constant */
14c40 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
14c50 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
14c60 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
14c70 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
14c80 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61  the .** Expr.fla
14c90 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
14ca0 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
14cb0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
14cc0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21  (E)->flags&(P))!
14cd0 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  =0).#define Expr
14ce0 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45  HasAllProperty(E
14cf0 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
14d00 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
14d10 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
14d20 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
14d30 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
14d40 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
14d50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
14d60 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
14d70 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56  ./* The ExprSetV
14d80 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63  VAProperty() mac
14d90 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ro is used for V
14da0 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
14db0 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20  idation,.** and 
14dc0 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e  Accreditation on
14dd0 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69  ly.  It works li
14de0 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ke ExprSetProper
14df0 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a  ty() during VVA.
14e00 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74  ** processes but
14e10 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20   is a no-op for 
14e20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66  delivery..*/.#if
14e30 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
14e40 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
14e50 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
14e60 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28  )  (E)->flags|=(
14e70 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
14e80 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
14e90 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66  erty(E,P).#endif
14ea0 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
14eb0 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
14ec0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
14ed0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
14ee0 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74  rmal Expr .** st
14ef0 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
14f00 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
14f10 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
14f20 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20  t in Expr.flags 
14f30 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
14f40 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
14f50 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
14f60 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
14f70 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
14f80 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
14f90 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
14fa0 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
14fb0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
14fc0 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
14fd0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
14fe0 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
14ff0 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
15000 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
15010 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
15020 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
15030 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
15040 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
15050 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
15060 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
15070 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
15080 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
15090 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65  omment .** above
150a0 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
150b0 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
150c0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
150d0 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
150e0 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
150f0 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
15100 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
15110 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
15120 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
15130 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
15140 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
15150 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
15160 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
15170 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
15180 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
15190 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
151a0 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
151b0 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
151c0 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
151d0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
151e0 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
151f0 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
15200 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
15210 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
15220 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
15230 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
15240 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
15250 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
15260 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
15270 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
15280 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
15290 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
152a0 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
152b0 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
152c0 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
152d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
152e0 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
152f0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
15300 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
15310 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
15320 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
15330 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
15340 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
15350 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
15360 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
15370 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
15380 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15390 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
153a0 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
153b0 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
153c0 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
153d0 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
153e0 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
153f0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
15400 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
15410 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
15420 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
15430 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
15440 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
15450 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
15460 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
15470 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
15480 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
154a0 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
154b0 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
154c0 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
154d0 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
154e0 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
154f0 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
15500 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
15510 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
15520 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  /* The list of e
15530 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
15540 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
15550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
15560 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
15570 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
15580 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
15590 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
155a0 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
155b0 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
155c0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
155d0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
155e0 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53      /* 1 for DES
155f0 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a  C or 0 for ASC *
15600 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  /.    unsigned d
15610 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a  one :1;       /*
15620 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
15630 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
15640 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
15650 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
15660 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f  bSpanIsTab :1; /
15670 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42  * zSpan holds DB
15680 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f  .TABLE.COLUMN */
15690 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
156a0 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20  usable :1;   /* 
156b0 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
156c0 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20  ion is reusable 
156d0 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
156e0 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
156f0 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
15700 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
15710 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
15720 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
15730 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
15740 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
15750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
15760 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
15770 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
15780 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
15790 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
157a0 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
157b0 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
157c0 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
157d0 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
157e0 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20  u;.  } *a;      
157f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
15800 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20  lloc a power of 
15810 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65  two greater or e
15820 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f  qual to nExpr */
15830 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
15840 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
15850 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
15860 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74   by the parser t
15870 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a  o record both.**
15880 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
15890 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f  for an expressio
158a0 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f  n and the span o
158b0 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72  f input text for
158c0 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   an.** expressio
158d0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  n..*/.struct Exp
158e0 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a  rSpan {.  Expr *
158f0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
15900 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  /* The expressio
15910 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a  n parse tree */.
15920 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
15930 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74  tart;   /* First
15940 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e   character of in
15950 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f  put text */.  co
15960 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20  nst char *zEnd; 
15970 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61      /* One chara
15980 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e  cter past the en
15990 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  d of input text 
159a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
159b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
159c0 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
159d0 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
159e0 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
159f0 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
15a00 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
15a10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15a20 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
15a30 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
15a40 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
15a50 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
15a60 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
15a70 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
15a80 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
15a90 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
15aa0 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
15ab0 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
15ac0 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
15ad0 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
15ae0 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
15af0 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
15b00 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
15b10 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
15b20 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
15b30 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
15b40 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
15b50 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
15b60 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
15b70 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
15b80 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
15b90 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
15ba0 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
15bb0 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
15bc0 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
15bd0 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
15be0 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
15bf0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
15c00 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
15c10 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
15c20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
15c30 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
15c40 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
15c50 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
15c60 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
15c70 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
15c80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
15c90 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
15ca0 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
15cb0 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20  .** The bitmask 
15cc0 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64  datatype defined
15cd0 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66   below is used f
15ce0 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  or various optim
15cf0 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  izations..**.** 
15d00 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72  Changing this fr
15d10 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61  om a 64-bit to a
15d20 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d   32-bit type lim
15d30 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  its the number o
15d40 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61  f.** tables in a
15d50 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74   join to 32 inst
15d60 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20  ead of 64.  But 
15d70 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20  it also reduces 
15d80 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74  the size.** of t
15d90 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33  he library by 73
15da0 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e  8 bytes on ix86.
15db0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20  .*/.typedef u64 
15dc0 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20  Bitmask;../*.** 
15dd0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
15de0 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
15df0 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
15e00 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
15e10 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
15e20 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
15e30 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
15e40 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
15e50 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
15e60 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
15e70 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
15e80 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
15e90 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
15ea0 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a  int)1)<<(n))../*
15eb0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
15ec0 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
15ed0 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
15ee0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
15ef0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
15f00 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
15f10 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
15f20 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
15f30 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
15f40 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
15f50 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
15f60 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
15f70 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
15f80 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
15f90 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
15fa0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
15fb0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
15fc0 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
15fd0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
15fe0 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
15ff0 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
16000 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
16010 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
16020 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
16030 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
16040 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
16050 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
16060 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
16070 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
16080 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
16090 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
160a0 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
160b0 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
160c0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
160d0 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
160e0 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
160f0 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
16100 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
16110 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
16120 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
16130 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
16140 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
16150 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
16160 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
16170 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
16180 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
16190 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
161a0 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
161b0 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
161c0 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
161d0 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
161e0 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
161f0 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
16200 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
16210 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
16220 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
16230 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
16240 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
16250 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
16260 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
16270 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
16280 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
16290 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
162a0 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
162b0 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
162c0 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
162d0 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
162e0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
162f0 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
16300 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
16310 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
16320 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
16330 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
16340 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
16350 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
16360 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
16370 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
16380 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
16390 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
163a0 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
163b0 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
163c0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
163d0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
163e0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
163f0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
16400 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
16410 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
16420 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
16430 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
16440 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
16450 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
16460 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
16470 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
16480 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
16490 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
164a0 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
164b0 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
164c0 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
164d0 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
164e0 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
164f0 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
16500 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
16510 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
16520 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
16530 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
16540 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
16550 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
16560 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
16570 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
16580 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
16590 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
165a0 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
165b0 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  e */.    u8 join
165c0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
165d0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
165e0 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
165f0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
16600 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
16610 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
16620 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
16630 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
16640 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
16650 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
16660 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
16670 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
16680 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
16690 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
166a0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
166b0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
166c0 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
166d0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
166e0 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
166f0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
16700 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
16710 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e   in WITH */.#ifn
16720 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16730 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
16740 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
16750 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
16760 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
16770 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
16780 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
16790 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
167a0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
167b0 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
167c0 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
167d0 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
167e0 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
167f0 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
16800 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
16810 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
16820 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
16830 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
16840 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
16850 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
16860 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
16870 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
16880 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63  is used */.    c
16890 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20  har *zIndex;    
168a0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
168b0 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
168c0 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
168d0 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
168e0 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64  Index;    /* Ind
168f0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
16900 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49  responding to zI
16910 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  ndex, if any */.
16920 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
16930 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
16940 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
16950 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
16960 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
16970 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
16980 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
16990 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
169a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
169b0 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
169c0 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
169d0 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
169e0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
169f0 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
16a00 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
16a10 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
16a20 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
16a30 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
16a40 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
16a50 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
16a60 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
16a70 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
16a80 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
16a90 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
16aa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
16ab0 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
16ac0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
16ad0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
16ae0 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
16af0 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
16b00 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
16b10 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
16b20 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
16b30 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
16b40 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
16b50 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
16b60 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
16b70 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
16b80 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
16b90 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
16ba0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
16bb0 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
16bc0 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
16bd0 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65  s member..*/.#de
16be0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
16bf0 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
16c00 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
16c10 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
16c20 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
16c30 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
16c40 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
16c50 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
16c60 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
16c70 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
16c80 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
16c90 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
16ca0 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
16cb0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
16cc0 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
16cd0 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
16ce0 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
16cf0 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
16d00 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
16d10 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38  TES_OK    0x0008
16d20 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
16d30 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
16d40 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
16d50 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e   WHERE_OMIT_OPEN
16d60 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f  _CLOSE  0x0010 /
16d70 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20  * Table cursors 
16d80 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e  are already open
16d90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16da0 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20  E_FORCE_TABLE   
16db0 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20     0x0020 /* Do 
16dc0 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78  not use an index
16dd0 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a  -only search */.
16de0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
16df0 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30  ETABLE_ONLY    0
16e00 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f  x0040 /* Only co
16e10 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65  de the 1st table
16e20 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a   in pTabList */.
16e30 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e  #define WHERE_AN
16e40 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30  D_ONLY         0
16e50 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75  x0080 /* Don't u
16e60 73 65 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f  se indices for O
16e70 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69  R terms */.#defi
16e80 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
16e90 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
16ea0 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
16eb0 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
16ec0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
16ed0 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
16ee0 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f      0x0200 /* pO
16ef0 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
16f00 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
16f10 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
16f20 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
16f30 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41  T    0x0400 /* A
16f40 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
16f50 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
16f60 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16f70 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
16f80 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f   0x0800 /* Suppo
16f90 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
16fa0 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
16fb0 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45  fine WHERE_REOPE
16fc0 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30  N_IDX       0x10
16fd0 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65  00 /* Try to use
16fe0 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f   OP_ReopenIdx */
16ff0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
17000 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
17010 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
17020 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
17030 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17040 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
17050 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
17060 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
17070 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17080 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
17090 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
170a0 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
170b0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
170c0 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
170d0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
170e0 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
170f0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17100 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
17110 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
17120 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
17130 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
17140 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
17150 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
17160 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
17170 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
17180 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
17190 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
171a0 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
171b0 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
171c0 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
171d0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
171e0 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
171f0 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
17200 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
17210 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
17220 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
17230 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
17240 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
17250 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
17260 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
17270 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
17280 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
17290 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
172a0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
172b0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
172c0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
172d0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
172e0 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
172f0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
17300 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
17310 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
17320 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
17330 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63  inner-most .** c
17340 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
17350 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
17360 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
17370 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
17380 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
17390 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
173a0 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
173b0 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
173c0 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
173d0 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
173e0 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
173f0 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
17400 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
17410 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
17420 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
17430 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
17440 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
17450 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
17460 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
17470 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
17480 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61  ented. .**.** Ea
17490 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
174a0 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
174b0 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
174c0 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
174d0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
174e0 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
174f0 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
17500 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
17510 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
17520 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
17530 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
17540 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
17550 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
17560 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
17570 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
17580 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
17590 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
175a0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
175b0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
175c0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
175d0 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
175e0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
175f0 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
17600 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
17610 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
17620 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
17630 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
17640 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
17650 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
17660 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
17670 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
17680 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
17690 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
176a0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
176b0 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
176c0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
176d0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
176e0 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
176f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17700 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
17710 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
17720 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
17730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17740 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
17750 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
17760 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
17770 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b  */.  u8 ncFlags;
17780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
17790 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
177a0 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
177b0 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
177c0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
177d0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
177e0 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
177f0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  d..*/.#define NC
17800 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20  _AllowAgg  0x01 
17810 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
17820 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
17830 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
17840 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
17850 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e     0x02    /* On
17860 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
17870 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
17880 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
17890 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34 20  _IsCheck   0x04 
178a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
178b0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
178c0 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
178d0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
178e0 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38  C_InAggFunc 0x08
178f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
17900 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
17910 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
17920 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
17930 50 61 72 74 49 64 78 20 20 20 30 78 31 30 20 20  PartIdx   0x10  
17940 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
17950 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
17960 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
17970 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
17980 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
17990 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
179a0 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
179b0 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
179c0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
179d0 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
179e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
179f0 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
17a00 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
17a10 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
17a20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
17a30 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
17a40 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
17a50 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
17a60 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
17a70 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
17a80 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
17a90 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
17aa0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
17ab0 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
17ac0 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
17ad0 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
17ae0 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
17af0 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
17b00 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
17b10 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
17b20 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
17b30 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
17b40 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
17b50 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
17b60 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
17b70 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
17b80 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
17b90 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
17ba0 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
17bb0 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
17bc0 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
17bd0 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
17be0 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
17bf0 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
17c00 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
17c10 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
17c20 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
17c30 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
17c40 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
17c50 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
17c60 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
17c70 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
17c80 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
17c90 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
17ca0 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
17cb0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
17cc0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
17cd0 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
17ce0 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
17cf0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
17d00 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
17d10 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
17d20 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
17d30 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
17d40 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
17d50 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
17d60 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
17d70 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
17d80 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
17d90 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
17da0 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
17db0 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
17dc0 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
17dd0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
17de0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
17df0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
17e00 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
17e10 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
17e20 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
17e30 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73  XCEPT */.  u16 s
17e40 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
17e50 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
17e60 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
17e70 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
17e80 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
17e90 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
17ea0 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
17eb0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e  counters */.  in
17ec0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
17ed0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
17ee0 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
17ef0 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
17f00 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65  ect */.  u64 nSe
17f10 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20  lectRow;        
17f20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
17f30 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
17f40 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ws */.  SrcList 
17f50 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
17f60 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
17f70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
17f80 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
17f90 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
17fa0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
17fb0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
17fc0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
17fd0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
17fe0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
17ff0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
18000 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
18010 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
18020 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
18030 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
18040 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
18050 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
18060 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
18070 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
18080 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
18090 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
180a0 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
180b0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
180c0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
180d0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
180e0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
180f0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
18100 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
18110 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
18120 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
18130 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
18140 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
18150 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
18160 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
18170 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
18180 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
18190 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
181a0 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
181b0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
181c0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
181d0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
181e0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
181f0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
18200 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
18210 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
18220 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
18230 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
18240 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
18250 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
18260 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64     0x0002  /* Id
18270 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
18280 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
18290 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
182a0 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
182b0 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
182c0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
182d0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
182e0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
182f0 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73   0x0008  /* Uses
18300 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
18310 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
18320 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
18330 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
18340 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
18350 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
18360 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
18370 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
18380 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a  o     0x0020  /*
18390 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
183a0 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
183b0 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20  data */.        
183c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
183d0 20 20 20 30 78 30 30 34 30 20 20 4e 4f 54 20 55     0x0040  NOT U
183e0 53 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SED */.#define S
183f0 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
18400 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e    0x0080  /* Syn
18410 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
18420 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 20  LUES clause */. 
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 20 2f 2a 20 20 20 20 20 30 78 30 31 30 30     /*     0x0100
18450 20 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64    NOT USED */.#d
18460 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
18470 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30 20  rom      0x0200 
18480 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
18490 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
184a0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
184b0 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
184c0 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a  rt    0x0400  /*
184d0 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
184e0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
184f0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
18500 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
18510 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a        0x0800  /*
18520 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
18530 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
18540 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
18550 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
18560 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
18570 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
18580 6e 64 20 71 75 65 72 79 20 2a 2f 0a 0a 0a 2f 2a  nd query */.../*
18590 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
185a0 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
185b0 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
185c0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
185d0 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
185e0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
185f0 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
18600 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
18610 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
18620 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
18630 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
18640 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
18650 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
18660 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
18670 6e 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20  ndex .**        
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
18690 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
186a0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
186b0 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
186c0 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
186d0 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
186e0 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
186f0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
18700 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
18710 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
18720 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
18730 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
18740 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
18770 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
18780 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
18790 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
187a0 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
187b0 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
187c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
187d0 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
187e0 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
187f0 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
18800 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18820 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
18830 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
18840 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
18850 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
18860 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
18870 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
18880 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
18890 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
188a0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
188b0 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
188c0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
188d0 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
188e0 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
188f0 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
18900 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18910 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
18920 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
18930 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
18940 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
18950 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
18960 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
18970 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
18980 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
18990 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
189a0 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
189b0 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
189c0 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
189f0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
18a00 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
18a10 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
18a20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
18a30 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
18a40 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
18a50 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
18a60 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
18a70 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
18a80 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
18a90 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
18aa0 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
18ac0 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
18ad0 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
18ae0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20  pDest->iSDParm. 
18af0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18b00 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
18b10 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
18b20 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
18b30 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
18b60 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
18b70 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
18b80 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
18b90 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
18ba0 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
18bb0 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
18bc0 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
18bf0 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
18c00 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
18c10 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
18c20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18c30 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
18c40 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
18c50 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
18c80 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
18c90 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
18ca0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18cb0 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
18cc0 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
18cd0 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
18ce0 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
18cf0 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
18d00 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
18d10 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
18d20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
18d30 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
18d40 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
18d50 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
18d80 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
18d90 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
18da0 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
18dd0 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
18de0 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
18df0 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18e10 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
18e20 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
18e30 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
18e40 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
18e50 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
18e60 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
18e70 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
18e80 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
18e90 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
18ea0 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
18eb0 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
18ee0 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
18ef0 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
18f00 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18f10 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
18f20 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
18f30 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
18f40 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18f60 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
18f70 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
18f80 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
18f90 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
18fa0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
18fb0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
18fc0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18fd0 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
18fe0 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
18ff0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19000 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
19030 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
19040 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
19050 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
19070 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
19080 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
19090 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
190a0 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
190b0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
190c0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
190d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
190e0 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
190f0 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
19100 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
19110 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
19120 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
19130 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
19140 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
19150 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
19160 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
19170 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19180 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
19190 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
191a0 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
191d0 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
191e0 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
191f0 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
19200 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
19210 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
19220 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
19230 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
19240 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
19250 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
19260 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
19270 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
19280 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
19290 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
192a0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
192b0 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
192c0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
192d0 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
192e0 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
192f0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
19300 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
19310 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
19320 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
19330 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
19340 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
19350 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
19360 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
19370 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
19380 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
19390 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
193a0 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
193b0 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
193c0 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
193d0 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
193e0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
193f0 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
19400 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19410 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
19420 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
19430 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
19440 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
19450 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
19460 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
19470 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19480 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
19490 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
194a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
194b0 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
194c0 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
194d0 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
194e0 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
194f0 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
19500 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
19510 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
19520 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
19530 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
19540 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
19550 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
19560 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
19570 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
19580 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
19590 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
195a0 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
195b0 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
195c0 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
195d0 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
195e0 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
195f0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
19600 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
19610 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
19620 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
19630 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
19640 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
19650 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
19660 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
19670 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
19680 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19690 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
196a0 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
196b0 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
196c0 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
196d0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
196e0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
196f0 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
19700 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
19710 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
19720 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
19730 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
19740 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
19750 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f  ffSdst;        /
19760 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
19770 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
19780 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
19790 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  Parm;         /*
197a0 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
197b0 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
197c0 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
197d0 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20  /.  int iSdst;  
197e0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
197f0 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
19800 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
19810 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
19820 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
19830 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
19840 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
19850 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
19860 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
19870 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
19880 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
19890 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
198a0 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
198b0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
198c0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
198d0 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
198e0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
198f0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
19900 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
19910 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
19920 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
19930 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
19940 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
19950 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
19960 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
19970 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
19980 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
19990 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
199a0 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
199b0 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
199c0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
199d0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
199e0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
199f0 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
19a00 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
19a10 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
19a20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
19a30 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
19a40 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
19a50 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
19a60 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
19a70 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
19a80 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
19a90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
19aa0 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
19ab0 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
19ac0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
19ad0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
19ae0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
19af0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
19b00 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
19b10 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
19b20 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
19b30 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
19b40 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
19b50 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
19b60 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
19b70 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
19b80 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
19b90 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
19ba0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
19bb0 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
19bc0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
19bd0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
19be0 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
19bf0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
19c00 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
19c10 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
19c20 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
19c30 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
19c40 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
19c50 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
19c60 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
19c70 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
19c80 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
19c90 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
19ca0 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
19cb0 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
19cc0 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
19cd0 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
19ce0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
19cf0 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
19d00 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
19d10 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
19d20 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
19d30 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
19d40 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
19d50 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
19d60 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
19d70 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
19d80 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
19d90 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
19da0 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
19db0 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
19dc0 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
19dd0 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
19de0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
19df0 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
19e00 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
19e10 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
19e20 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
19e30 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
19e40 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
19e50 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
19e60 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
19e70 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
19e80 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
19e90 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
19ea0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
19eb0 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
19ec0 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
19ed0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
19ee0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
19ef0 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
19f00 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
19f10 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
19f20 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
19f30 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
19f40 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
19f50 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
19f60 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
19f70 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
19f80 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
19f90 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
19fa0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
19fb0 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
19fc0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
19fd0 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
19fe0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
19ff0 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
1a000 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
1a010 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
1a020 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
1a030 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
1a040 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
1a050 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
1a060 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
1a070 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
1a080 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
1a090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a0a0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
1a0b0 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
1a0c0 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
1a0d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
1a0e0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
1a0f0 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
1a100 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
1a110 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
1a120 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
1a130 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
1a140 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
1a150 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
1a160 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
1a170 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1a180 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53   char yDbMask[(S
1a190 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1a1a0 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69  ED+9)/8];.# defi
1a1b0 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1a1c0 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f  I)    (((M)[(I)/
1a1d0 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29  8]&(1<<((I)&7)))
1a1e0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1a1f0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1a200 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69   memset((M),0,si
1a210 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e  zeof(M)).# defin
1a220 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1a230 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c       (M)[(I)/8]|
1a240 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20  =(1<<((I)&7)).# 
1a250 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1a260 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65  Zero(M)   sqlite
1a270 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1a280 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1a290 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73  kNonZero(M)   (s
1a2a0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1a2b0 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65  ero(M)==0).#else
1a2c0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1a2d0 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
1a2e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1a2f0 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1a300 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29  M)&(((yDbMask)1)
1a310 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65  <<(I)))!=0).# de
1a320 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1a330 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20  M)      (M)=0.# 
1a340 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1a350 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28  (M,I)     (M)|=(
1a360 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1a370 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1a380 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28  skAllZero(M)   (
1a390 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  M)==0.# define D
1a3a0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1a3b0 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a    (M)!=0.#endif.
1a3c0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
1a3d0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
1a3e0 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
1a3f0 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
1a400 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
1a410 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
1a420 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
1a430 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
1a440 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
1a450 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
1a460 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1a470 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
1a480 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
1a490 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
1a4a0 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
1a4b0 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
1a4c0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
1a4d0 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
1a4e0 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
1a4f0 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
1a500 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
1a510 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
1a520 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
1a530 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
1a540 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
1a550 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
1a560 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
1a570 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
1a580 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
1a590 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
1a5a0 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
1a5b0 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
1a5c0 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
1a5d0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1a5e0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1a5f0 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1a600 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1a610 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1a620 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1a630 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1a640 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1a650 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1a660 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1a670 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1a680 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1a690 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1a6a0 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1a6b0 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1a6c0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1a6d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1a6e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1a6f0 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1a700 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1a710 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1a720 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1a730 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1a740 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1a750 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1a760 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1a770 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1a780 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1a790 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1a7a0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1a7b0 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1a7c0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1a7d0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1a7e0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1a7f0 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1a800 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1a810 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1a820 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1a830 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1a840 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1a850 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a860 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1a870 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1a880 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1a890 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1a8a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a8b0 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1a8c0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1a8d0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1a8e0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1a8f0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1a900 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1a910 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1a920 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1a930 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1a940 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1a950 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1a960 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1a970 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1a980 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1a990 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1a9a0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1a9b0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1a9c0 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1a9d0 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1a9e0 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1a9f0 61 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ants */.  int aT
1aa00 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
1aa10 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1aa20 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1aa30 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
1aa40 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
1aa50 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1aa60 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1aa70 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1aa80 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
1aa90 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1aaa0 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
1aab0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1aac0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1aad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1aae0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
1aaf0 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
1ab00 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1ab10 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
1ab20 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
1ab30 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
1ab40 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
1ab50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ab60 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1ab70 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1ab80 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
1ab90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1aba0 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
1abb0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1abc0 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
1abd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
1abe0 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
1abf0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1ac00 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1ac10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1ac20 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1ac30 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1ac40 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b  .  int iFixedOp;
1ac50 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72          /* Never
1ac60 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65   back out opcode
1ac70 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20  s iFixedOp-1 or 
1ac80 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74  earlier */.  int
1ac90 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
1aca0 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1acb0 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
1acc0 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
1acd0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61  nts */.  int iPa
1ace0 72 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a  rtIdxTab;     /*
1acf0 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   Table correspon
1ad00 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61  ding to a partia
1ad10 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  l index */.  int
1ad20 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1ad30 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1ad40 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1ad50 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1ad60 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1ad70 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1ad80 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1ad90 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1ada0 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1adb0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1adc0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1add0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1ade0 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1adf0 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1ae00 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1ae10 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1ae20 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  /.  struct yColC
1ae30 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
1ae40 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
1ae50 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
1ae60 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
1ae70 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
1ae80 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
1ae90 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
1aea0 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
1aeb0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
1aec0 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
1aed0 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
1aee0 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
1aef0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
1af00 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
1af10 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
1af20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
1af30 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
1af40 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
1af50 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
1af60 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
1af70 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
1af80 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
1af90 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
1afa0 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
1afb0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
1afc0 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
1afd0 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
1afe0 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
1aff0 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
1b000 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1b010 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
1b020 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
1b030 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  s */.  Token con
1b040 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
1b050 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
1b060 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
1b070 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
1b080 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
1b090 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
1b0a0 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
1b0b0 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
1b0c0 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
1b0d0 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
1b0e0 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
1b0f0 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
1b100 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
1b110 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51  t cookieValue[SQ
1b120 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1b130 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73  D+2];  /* Values
1b140 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76   of cookies to v
1b150 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72  erify */.  int r
1b160 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
1b170 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1b180 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
1b190 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
1b1a0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
1b1b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
1b1c0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1b1d0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
1b1e0 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
1b1f0 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
1b200 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
1b210 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
1b220 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
1b230 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23  sub-program */.#
1b240 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1b250 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1b260 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1b270 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1b280 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1b290 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1b2a0 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1b2b0 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1b2c0 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1b2d0 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1b2e0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1b2f0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1b300 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1b310 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1b320 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1b330 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
1b340 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
1b350 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
1b360 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
1b370 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
1b380 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
1b390 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
1b3a0 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
1b3b0 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
1b3c0 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
1b3d0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
1b3e0 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
1b3f0 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
1b400 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
1b410 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
1b420 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1b430 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
1b440 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69  */.  int addrSki
1b450 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  pPK;      /* Add
1b460 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74  ress of instruct
1b470 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d  ion to skip PRIM
1b480 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
1b490 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
1b4a0 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
1b4b0 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
1b4c0 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
1b4d0 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
1b4e0 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
1b4f0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1b500 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
1b510 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1b520 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
1b530 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
1b540 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
1b550 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
1b560 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
1b570 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
1b580 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
1b590 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
1b5a0 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
1b5b0 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1b5c0 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
1b5d0 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
1b5e0 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1b5f0 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
1b600 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
1b610 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
1b620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b660 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1b670 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1b680 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1b690 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1b6a0 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1b6b0 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1b6c0 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1b6d0 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1b6e0 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1b6f0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1b700 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1b710 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f  f(Parse,nVar) so
1b720 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20   the nVar field 
1b730 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73  must be the firs
1b740 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20  t field.  ** in 
1b750 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
1b760 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
1b770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b7a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b7b0 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b7d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
1b7e0 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
1b7f0 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
1b800 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
1b830 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
1b840 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
1b850 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1b860 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1b870 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1b880 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1b890 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b  .  u8 bFreeWith;
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b8b0 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68  True if pWith sh
1b8c0 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69  ould be freed wi
1b8d0 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75  th parser */.  u
1b8e0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1b8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b900 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1b910 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1b920 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1b930 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1b940 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1b950 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1b960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1b970 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1b980 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1b990 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1b9a0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1b9b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b9c0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1b9d0 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1b9e0 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ba00 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1ba10 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1ba20 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1ba30 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1ba40 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1ba50 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1ba60 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1ba70 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1ba80 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1ba90 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1baa0 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1bab0 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1bac0 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1bad0 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1bae0 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1baf0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1bb00 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1bb10 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1bb20 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1bb30 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1bb40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1bb50 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1bb60 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1bb70 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1bb80 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1bb90 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1bba0 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1bbb0 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1bbc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1bbd0 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1bbe0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1bbf0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1bc00 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1bc10 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1bc20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1bc30 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1bc40 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1bc50 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1bc60 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1bc70 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1bc80 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1bc90 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1bca0 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1bcb0 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1bcc0 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1bcd0 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1bce0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1bcf0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1bd00 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1bd10 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1bd20 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1bd30 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1bd40 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1bd50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1bd60 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1bd70 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1bd80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1bd90 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1bda0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1bdb0 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1bdc0 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1bdd0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1bde0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1bdf0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1be00 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1be10 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1be20 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1be30 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1be40 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1be50 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1be60 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1be70 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1be80 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1be90 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1bea0 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1beb0 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1bec0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1bee0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1bef0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d  se, or NULL */.}
1bf00 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1bf10 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1bf20 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1bf30 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1bf40 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1bf50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1bf60 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1bf70 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1bf80 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1bf90 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1bfa0 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1bfb0 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1bfc0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1bfd0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1bfe0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1bff0 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1c000 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1c010 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1c020 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1c030 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1c040 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1c050 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1c060 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1c070 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1c080 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1c090 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1c0a0 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1c0b0 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1c0c0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c0e0 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1c0f0 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1c100 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1c110 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1c120 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1c130 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1c140 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1c150 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1c160 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1c170 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1c180 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1c190 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
1c1a0 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1c1b0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
1c1c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
1c1d0 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
1c1e0 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
1c1f0 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
1c200 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
1c210 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
1c220 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
1c230 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
1c240 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
1c250 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
1c260 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
1c270 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
1c280 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
1c290 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
1c2a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1c2b0 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20  LAG_CLEARCACHE  
1c2c0 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65    0x20    /* Cle
1c2d0 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  ar pseudo-table 
1c2e0 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75  cache in OP_Colu
1c2f0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  mn */.#define OP
1c300 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
1c310 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
1c320 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
1c330 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
1c340 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c350 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
1c360 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
1c370 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1c380 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
1c390 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
1c3a0 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
1c3b0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
1c3c0 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
1c3d0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
1c3e0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
1c3f0 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20  EG       0x02   
1c400 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
1c410 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
1c420 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
1c430 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
1c440 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
1c450 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
1c460 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
1c470 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  ion */../*. * Ea
1c480 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
1c490 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
1c4a0 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
1c4b0 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
1c4c0 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
1c4d0 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
1c4e0 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
1c4f0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1c500 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
1c510 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
1c520 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
1c530 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
1c540 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
1c550 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
1c560 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
1c570 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
1c580 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
1c590 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
1c5a0 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
1c5b0 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
1c5c0 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
1c5d0 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
1c5e0 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
1c5f0 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
1c600 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
1c610 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
1c620 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
1c630 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
1c640 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
1c650 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
1c660 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
1c670 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
1c680 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
1c690 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
1c6a0 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
1c6b0 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
1c6c0 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
1c6d0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
1c6e0 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
1c6f0 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
1c700 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
1c710 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
1c720 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
1c730 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
1c740 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
1c750 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1c760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1c770 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
1c780 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
1c790 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1c7a0 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
1c7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c7c0 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
1c7d0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
1c7e0 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
1c7f0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1c800 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1c810 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1c820 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1c830 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
1c840 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
1c850 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1c860 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
1c870 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
1c880 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
1c890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1c8a0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
1c8b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1c8c0 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
1c8d0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
1c8e0 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
1c8f0 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
1c900 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
1c910 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
1c940 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
1c950 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1c960 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1c970 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
1c980 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1c990 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
1c9a0 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
1c9b0 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
1c9c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1c9d0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
1c9e0 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
1c9f0 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
1ca00 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
1ca10 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
1ca20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
1ca30 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
1ca40 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
1ca50 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1ca60 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
1ca70 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
1ca80 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
1ca90 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
1caa0 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
1cab0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
1cac0 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
1cad0 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49   which. .**.** I
1cae0 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
1caf0 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
1cb00 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
1cb10 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
1cb20 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
1cb30 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
1cb40 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
1cb50 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
1cb60 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
1cb70 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
1cb80 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1cb90 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
1cba0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1cbb0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1cbc0 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
1cbd0 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
1cbe0 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
1cbf0 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
1cc00 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
1cc10 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  am. . *. * Insta
1cc20 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1cc30 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
1cc40 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
1cc50 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
1cc60 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
1cc70 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
1cc80 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
1cc90 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
1cca0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a   member of the .
1ccb0 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
1ccc0 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
1ccd0 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
1cce0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
1ccf0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
1cd00 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
1cd10 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
1cd20 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20  program.. * . * 
1cd30 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
1cd40 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
1cd50 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
1cd60 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
1cd70 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
1cd80 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
1cd90 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
1cda0 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
1cdb0 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
1cdc0 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61  ed by the . * va
1cdd0 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
1cde0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
1cdf0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
1ce00 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
1ce10 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
1ce20 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
1ce30 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
1ce40 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1ce50 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
1ce60 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
1ce70 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1ce80 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1ce90 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
1cea0 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
1ceb0 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
1cec0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67  se NULL.. * targ
1ced0 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1cee0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1cef0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1cf00 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
1cf10 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
1cf20 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
1cf30 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1cf40 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
1cf50 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1cf60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1cf70 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
1cf80 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
1cf90 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1cfa0 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
1cfb0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1cfc0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1cfd0 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
1cfe0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20   VALUES ... . * 
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1d000 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
1d010 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
1d020 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
1d030 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d040 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
1d050 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
1d060 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74  ELETE). * target
1d070 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1d080 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1d090 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1d0a0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1d0b0 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1d0c0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1d0d0 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1d0e0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1d0f0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1d100 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1d110 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1d120 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1d130 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61  TK_UPDATE). * ta
1d140 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1d150 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1d160 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1d170 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1d180 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57  e rows of.. * pW
1d190 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1d1a0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1d1b0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1d1c0 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1d1d0 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1d1e0 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1d1f0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1d200 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1d210 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1d220 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1d230 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1d240 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1d250 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1d260 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1d270 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1d280 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1d290 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d2a0 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1d2b0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1d2c0 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d2e0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1d2f0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1d300 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1d310 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1d320 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1d330 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1d340 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1d350 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1d360 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1d370 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1d380 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1d390 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1d3a0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65  /* SELECT statme
1d3b0 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1d3c0 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45  ERT INTO .. SELE
1d3d0 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65  CT ... */.  Toke
1d3e0 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20  n target;       
1d3f0 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
1d400 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
1d410 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
1d420 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1d430 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1d440 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
1d450 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1d460 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
1d470 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
1d480 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
1d490 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64   UPDATE. */.  Id
1d4a0 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
1d4b0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
1d4c0 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
1d4d0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1d4e0 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1d4f0 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
1d500 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1d510 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
1d520 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
1d530 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
1d540 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
1d550 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1d560 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1d570 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
1d580 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1d590 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
1d5a0 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
1d5b0 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
1d5c0 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
1d5d0 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
1d5e0 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
1d5f0 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65  cit.  .*/.typede
1d600 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
1d610 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
1d620 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
1d630 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1d640 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
1d650 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
1d660 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
1d670 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1d680 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
1d690 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
1d6a0 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
1d6b0 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20  int bVarOnly;   
1d6c0 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
1d6d0 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
1d6e0 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63  nces only */.  c
1d6f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
1d700 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
1d710 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20  all objects are 
1d720 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
1d730 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
1d740 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
1d750 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74  e;  /* Type of t
1d760 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1d770 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1d780 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ssages */.  cons
1d790 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20  t Token *pName; 
1d7a0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1d7b0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1d7c0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1d7d0 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
1d7e0 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64  An objected used
1d7f0 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
1d800 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72  he text of a str
1d810 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20  ing where we.** 
1d820 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
1d830 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ly know how big 
1d840 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20  the string will 
1d850 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a  be in the end..*
1d860 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75  /.struct StrAccu
1d870 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  m {.  sqlite3 *d
1d880 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
1d890 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
1d8a0 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
1d8b0 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
1d8c0 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20   char *zBase;   
1d8d0 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20        /* A base 
1d8e0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
1d8f0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f   from malloc. */
1d900 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
1d910 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
1d920 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
1d930 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1d940 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
1d950 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
1d960 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
1d970 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63  */.  int  nAlloc
1d980 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
1d990 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
1d9a0 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
1d9b0 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f  */.  int  mxAllo
1d9c0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
1d9d0 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72  imum allowed str
1d9e0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1d9f0 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20  u8   useMalloc; 
1da00 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c       /* 0: none,
1da10 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61    1: sqlite3DbMa
1da20 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65  lloc,  2: sqlite
1da30 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38  3_malloc */.  u8
1da40 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
1da50 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
1da60 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
1da70 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64  _TOOBIG */.};.#d
1da80 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
1da90 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
1daa0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1dab0 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69    2../*.** A poi
1dac0 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1dad0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1dae0 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1daf0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1db00 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1db10 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1db20 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1db30 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1db40 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1db50 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1db60 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1db70 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1db80 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1db90 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
1dba0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1dbb0 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
1dbc0 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1dbd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
1dbe0 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
1dbf0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
1dc00 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
1dc10 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1dc20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1dc30 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1dc40 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1dc50 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1dc60 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1dc70 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1dc80 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1dc90 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1dca0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1dcb0 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1dcc0 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1dcd0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1dce0 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1dcf0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1dd00 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1dd10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1dd20 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1dd30 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1dd40 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1dd70 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1dd80 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1dd90 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1dda0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ddb0 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1ddc0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1ddd0 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ddf0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1de00 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1de10 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1de20 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1de40 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1de50 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1de60 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1de70 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1de80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1de90 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1dea0 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
1deb0 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
1dec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1ded0 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
1dee0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
1def0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1df00 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1df10 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1df20 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1df30 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1df40 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1df50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1df60 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1df70 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1df80 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1df90 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1dfa0 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1dfb0 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1dfc0 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1dfd0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1dfe0 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1dff0 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1e000 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1e010 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1e020 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1e030 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1e040 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1e050 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1e060 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
1e090 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
1e0a0 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e0c0 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
1e0d0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
1e0e0 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
1e0f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
1e100 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
1e110 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
1e120 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
1e130 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
1e140 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
1e150 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
1e160 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1e170 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
1e180 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1e190 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
1e1a0 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
1e1b0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1e1c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63             /* Sc
1e1d0 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a  ratch memory */.
1e1e0 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b    int szScratch;
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e200 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1e210 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66  ach scratch buff
1e220 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72  er */.  int nScr
1e230 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1e240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e250 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62  ber of scratch b
1e260 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
1e270 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e290 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
1e2a0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
1e2b0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1e2c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1e2d0 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
1e2e0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1e2f0 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e310 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
1e320 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
1e330 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
1e340 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
1e350 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
1e360 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
1e370 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
1e380 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
1e390 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
1e3a0 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
1e3b0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
1e3c0 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54  nabled */.  /* T
1e3d0 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
1e3e0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
1e3f0 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
1e400 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
1e410 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
1e420 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
1e430 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
1e440 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
1e470 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
1e480 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
1e490 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4b0 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
1e4c0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
1e4d0 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
1e4e0 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1e510 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
1e520 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1e530 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e550 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1e560 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1e570 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
1e580 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
1e590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1e5a0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
1e5b0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
1e5c0 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
1e5d0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1e5e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e5f0 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
1e600 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74  Mutex */.  sqlit
1e610 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
1e620 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
1e630 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
1e640 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1e650 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
1e660 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
1e670 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
1e680 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
1e690 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
1e6a0 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
1e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e6c0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
1e6d0 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69   to xLog() */.#i
1e6e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1e6f0 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
1e700 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
1e710 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
1e720 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
1e730 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
1e740 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1e750 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52  QLITE_VDBE_COVER
1e760 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  AGE.  /* The fol
1e770 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  lowing callback 
1e780 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73  (if not NULL) is
1e790 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72   invoked on ever
1e7a0 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20  y VDBE branch.  
1e7b0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53  ** operation.  S
1e7c0 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  et the callback 
1e7d0 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
1e7e0 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
1e7f0 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64  AGE..  */.  void
1e800 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28   (*xVdbeBranch)(
1e810 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69  void*,int iSrcLi
1e820 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
1e830 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
1e840 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
1e850 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
1e890 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
1e8a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
1e8b0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e  UILTIN_TEST.  in
1e8c0 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
1e8d0 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
1e8e0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
1e8f0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
1e900 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1e910 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e930 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
1e940 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
1e950 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
1e960 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
1e970 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
1e980 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
1e990 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
1e9a0 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
1e9b0 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
1e9c0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
1e9d0 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
1e9e0 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
1e9f0 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
1ea00 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
1ea10 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
1ea20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
1ea30 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
1ea40 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
1ea50 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
1ea60 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
1ea70 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
1ea80 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
1ea90 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
1eaa0 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
1eab0 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
1eac0 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
1ead0 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
1eae0 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
1eaf0 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
1eb00 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
1eb10 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
1eb20 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
1eb30 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
1eb40 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
1eb50 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
1eb60 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
1eb70 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
1eb80 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
1eb90 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
1eba0 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
1ebb0 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
1ebc0 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
1ebd0 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
1ebe0 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
1ebf0 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
1ec00 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
1ec10 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72   {.  int (*xExpr
1ec20 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1ec30 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
1ec40 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
1ec50 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1ec60 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
1ec70 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
1ec80 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
1ec90 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
1eca0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
1ecb0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
1ecc0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
1ecd0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
1ece0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1ecf0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1ed00 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ed20 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
1ed30 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  .  */.  int walk
1ed40 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1ed70 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
1ed80 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
1edb0 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
1edc0 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
1edd0 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
1ee00 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
1ee10 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
1ee40 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20  eger value */.  
1ee50 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1ee60 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ee80 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1ee90 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
1eea0 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1eec0 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
1eed0 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
1eee0 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
1eef0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
1ef00 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
1ef10 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
1ef20 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
1ef30 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
1ef40 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
1ef50 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1ef60 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
1ef70 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1ef80 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1ef90 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
1efa0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1efb0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1efc0 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
1efd0 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  Select*);../*.**
1efe0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1eff0 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
1f000 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
1f010 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
1f020 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
1f030 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
1f040 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
1f050 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
1f060 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
1f070 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
1f080 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
1f090 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
1f0a0 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
1f0b0 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
1f0c0 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
1f0d0 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
1f0e0 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
1f0f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1f100 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
1f110 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
1f120 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
1f130 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
1f140 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
1f150 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
1f160 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
1f170 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
1f180 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
1f190 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f1b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
1f1c0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
1f1d0 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
1f1e0 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
1f1f0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
1f200 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
1f210 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
1f220 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
1f250 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
1f260 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
1f270 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f290 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
1f2a0 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
1f2b0 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
1f2c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
1f2d0 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
1f2e0 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
1f2f0 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
1f300 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1f310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f320 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
1f330 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
1f340 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
1f350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f360 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1f370 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
1f380 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1f390 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  a[1];.};../*.** 
1f3a0 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
1f3b0 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1f3c0 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
1f3d0 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
1f3e0 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
1f3f0 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
1f400 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
1f410 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
1f420 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
1f430 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
1f440 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1f460 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
1f470 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
1f4a0 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
1f4b0 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
1f4c0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
1f4d0 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
1f510 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
1f520 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
1f530 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
1f540 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
1f550 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
1f560 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
1f570 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
1f580 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
1f590 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
1f5a0 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
1f5b0 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
1f5c0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
1f5d0 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
1f5e0 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
1f5f0 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
1f600 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
1f610 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
1f620 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
1f630 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
1f640 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
1f650 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1f660 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1f670 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
1f680 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
1f690 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
1f6a0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
1f6b0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
1f6c0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1f6d0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1f6e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
1f6f0 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
1f700 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
1f710 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1f720 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
1f730 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
1f740 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
1f750 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
1f760 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
1f770 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
1f780 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
1f790 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
1f7a0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
1f7b0 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
1f7c0 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
1f7d0 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
1f7e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1f7f0 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
1f800 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
1f810 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
1f820 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
1f830 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1f840 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
1f850 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1f860 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
1f870 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
1f880 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS3.#endif../*
1f890 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
1f8a0 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
1f8b0 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
1f8c0 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
1f8d0 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
1f8e0 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
1f8f0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
1f900 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
1f910 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1f920 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
1f930 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
1f940 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1f950 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
1f960 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
1f970 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
1f980 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
1f990 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1f9a0 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
1f9b0 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
1f9c0 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1f9d0 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
1f9e0 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
1f9f0 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
1fa00 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
1fa10 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
1fa20 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
1fa30 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1fa40 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1fa50 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
1fa60 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
1fa70 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
1fa80 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
1fa90 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
1faa0 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
1fab0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1fac0 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
1fad0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fae0 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
1faf0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1fb00 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1fb10 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
1fb20 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1fb30 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1fb40 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1fb50 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
1fb60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fb70 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
1fb80 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1fb90 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1fba0 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
1fbb0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1fbc0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1fbd0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1fbe0 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
1fbf0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fc00 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
1fc10 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1fc20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1fc30 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
1fc40 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1fc50 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
1fc60 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
1fc70 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
1fc80 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1fc90 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1fca0 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
1fcb0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1fcc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1fcd0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
1fce0 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
1fcf0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1fd00 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1fd10 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
1fd20 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1fd30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fd40 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
1fd50 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
1fd60 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1fd70 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1fd80 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
1fd90 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1fda0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1fdb0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
1fdc0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
1fdd0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1fde0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
1fdf0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
1fe00 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1fe10 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (x)).#endif../*.
1fe20 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
1fe30 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
1fe40 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
1fe50 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
1fe60 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
1fe70 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
1fe80 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
1fe90 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
1fea0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
1feb0 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
1fec0 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
1fed0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1fee0 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
1fef0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1ff00 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
1ff10 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
1ff20 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
1ff30 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1ff40 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
1ff50 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1ff60 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
1ff70 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
1ff80 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
1ff90 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1ffa0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
1ffb0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
1ffc0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1ffd0 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
1ffe0 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
1fff0 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
20000 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
20010 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
20020 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
20030 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20040 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
20050 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
20060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
20070 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
20080 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
20090 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
200a0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
200b0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
200c0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
200d0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
200e0 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
200f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
20100 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
20110 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
20120 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
20130 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
20140 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
20150 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
20160 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
20170 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
20180 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
20190 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
201a0 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
201b0 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
201c0 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
201d0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
201e0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
201f0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
20200 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
20210 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
20220 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
20230 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
20240 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
20250 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
20260 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
20270 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
20280 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
20290 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
202a0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
202b0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
202c0 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
202d0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
202e0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
202f0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
20300 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
20310 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20320 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
20330 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20340 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
20350 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
20360 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20370 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
20380 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
20390 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
203a0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
203b0 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
203c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
203d0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
203e0 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
203f0 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
20400 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20410 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
20420 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
20430 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
20440 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20450 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
20460 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
20470 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
20480 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20490 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
204a0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
204b0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
204c0 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
204d0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
204e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
204f0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
20500 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
20510 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
20520 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
20530 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
20540 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
20550 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20560 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
20570 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
20580 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
20590 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
205a0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
205b0 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
205c0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
205d0 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
205e0 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
205f0 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
20600 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
20610 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
20620 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
20630 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
20640 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
20650 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
20660 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20670 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
20680 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
20690 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
206a0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
206b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
206c0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
206d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
206e0 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
206f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
20700 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
20710 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
20720 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
20730 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
20740 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
20750 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
20760 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
20770 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
20780 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
20790 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
207a0 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
207c0 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
207d0 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
207e0 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
207f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20800 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
20810 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
20820 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
20830 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
20840 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
20850 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  s */.};..#define
20860 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
20870 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65  NTERNAL 0x01.#de
20880 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
20890 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
208a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
208b0 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
208c0 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
208d0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
208e0 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
208f0 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
20900 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
20910 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
20920 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
20930 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
20940 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
20950 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
20960 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
20970 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
20980 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
20990 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
209a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
209b0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
209c0 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
209d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
209e0 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
209f0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
20a00 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
20a10 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
20a20 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
20a30 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
20a40 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
20a50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
20a60 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
20a70 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
20a80 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
20a90 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
20aa0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
20ab0 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
20ac0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20ad0 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
20ae0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20af0 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
20b00 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
20b10 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
20b20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
20b30 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
20b40 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
20b50 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
20b60 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
20b70 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
20b80 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
20b90 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
20ba0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
20bb0 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
20bc0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
20bd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
20be0 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
20bf0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
20c00 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
20c10 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
20c20 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
20c30 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
20c40 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
20c50 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
20c60 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
20c70 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
20c80 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
20c90 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
20ca0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
20cb0 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
20cc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
20cd0 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
20ce0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
20cf0 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
20d00 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
20d10 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
20d20 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
20d30 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
20d40 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
20d50 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
20d60 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
20d70 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
20d80 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
20d90 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
20da0 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
20db0 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
20dc0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
20dd0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20de0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
20df0 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
20e00 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20e10 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
20e20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
20e30 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
20e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
20e50 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
20e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
20e70 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
20e80 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
20e90 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
20ea0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
20eb0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
20ec0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
20ed0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
20ee0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
20ef0 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
20f00 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
20f10 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
20f20 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
20f30 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
20f40 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
20f50 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
20f60 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
20f70 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
20f80 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
20f90 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
20fa0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
20fb0 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
20fc0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
20fd0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
20fe0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
20ff0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
21000 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
21010 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
21020 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
21030 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
21040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21050 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
21060 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
21070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21080 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
21090 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
210a0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
210b0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
210c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
210d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
210e0 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
210f0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
21100 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
21110 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
21120 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
21130 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
21140 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
21150 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
21160 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
21170 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21180 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
21190 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
211a0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
211b0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
211c0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
211d0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
211e0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
211f0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
21200 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21210 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
21220 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
21230 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
21240 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
21250 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
21260 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21270 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
21280 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
21290 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
212a0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
212b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
212c0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
212d0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
212e0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
212f0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
21300 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
21310 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
21320 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
21330 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
21340 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
21350 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
21360 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
21370 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
21380 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
21390 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
213a0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
213b0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
213c0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
213d0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
213e0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
213f0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
21400 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
21410 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21420 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
21430 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
21440 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
21450 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
21460 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
21470 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
21480 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
21490 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
214a0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
214b0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
214c0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
214d0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
214e0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
214f0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
21500 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21510 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
21520 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
21530 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
21540 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
21550 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
21560 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
21570 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
21580 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
21590 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
215a0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
215b0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
215c0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
215d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
215e0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
215f0 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
21600 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
21610 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
21620 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
21630 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
21640 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
21650 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
21660 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
21670 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
21680 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
21690 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
216a0 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
216b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
216c0 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
216d0 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
216e0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
216f0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
21700 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21710 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
21720 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
21730 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
21740 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
21750 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
21760 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
21770 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
21780 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
21790 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
217a0 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
217b0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
217c0 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
217d0 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
217e0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
217f0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
21800 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
21810 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
21820 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
21830 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
21840 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
21850 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
21860 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
21870 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
21880 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
21890 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
218a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
218b0 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
218c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
218d0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
218e0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
218f0 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
21900 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
21910 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
21920 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
21930 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
21940 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
21950 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
21960 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
21970 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
21980 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
21990 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
219a0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
219b0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
219c0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
219d0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
219e0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
219f0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
21a00 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
21a10 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
21a20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
21a30 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
21a40 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
21a50 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
21a60 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
21a70 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
21a80 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
21a90 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
21aa0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
21ab0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
21ac0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
21ad0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
21ae0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
21af0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
21b00 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
21b10 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
21b20 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
21b30 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
21b40 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
21b50 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
21b60 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
21b70 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
21b80 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
21b90 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
21ba0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
21bb0 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
21bc0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
21bd0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
21be0 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
21bf0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
21c00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
21c10 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
21c20 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
21c30 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
21c40 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
21c50 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
21c60 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
21c70 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
21c80 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
21c90 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
21cc0 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
21cd0 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
21ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
21cf0 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
21d00 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
21d10 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73   Token *);.int s
21d20 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
21d30 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
21d40 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
21d50 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
21d60 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
21d70 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
21d80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21d90 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
21da0 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
21db0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
21dc0 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
21dd0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
21de0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21df0 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
21e00 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
21e10 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
21e20 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
21e30 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
21e40 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
21e50 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
21e60 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
21e70 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
21e80 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
21e90 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21eb0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
21ec0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21ed0 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
21ee0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
21ef0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21f00 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
21f10 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
21f20 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
21f30 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
21f40 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
21f50 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
21f60 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f80 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
21f90 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45  ist*,u16,Expr*,E
21fa0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
21fb0 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
21fc0 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
21fd0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
21fe0 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
21ff0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22000 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
22010 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
22020 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
22030 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
22040 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
22050 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
22060 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
22070 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22080 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
22090 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
220a0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
220b0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
220c0 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
220d0 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
220e0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
220f0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
22100 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
22110 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
22120 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
22130 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
22140 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22150 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
22160 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
22170 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22180 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
22190 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
221a0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
221b0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
221c0 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
221d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
221e0 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
221f0 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68  );.u64 sqlite3Wh
22200 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
22210 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
22220 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
22230 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
22240 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22250 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
22260 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
22270 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
22280 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
22290 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
222a0 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
222b0 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
222c0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
222d0 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
222e0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
222f0 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
22300 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
22310 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22320 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
22330 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22340 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
22350 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22360 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
22370 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
22380 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22390 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
223a0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
223b0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
223c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
223d0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
223e0 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
223f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22400 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
22410 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
22420 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22430 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
22440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22450 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
22460 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
22470 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22480 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
22490 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
224a0 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
224b0 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
224c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
224d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
224e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
224f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22500 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72  e3ExprCodeFactor
22510 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70  able(Parse*, Exp
22520 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
22530 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74  qlite3ExprCodeAt
22540 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70  Init(Parse*, Exp
22550 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  r*, int, u8);.in
22560 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
22570 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
22580 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
22590 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
225a0 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
225b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
225c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
225d0 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
225e0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
225f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22600 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
22610 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
22620 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
22630 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
22640 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
22650 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
22660 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
22670 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
22680 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
22690 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
226a0 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20  t terms */.void 
226b0 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
226c0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
226d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
226e0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
226f0 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
22700 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
22710 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
22720 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
22730 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
22740 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
22750 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
22760 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
22770 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
22780 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22790 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
227a0 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
227b0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
227c0 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
227d0 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
227e0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
227f0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
22800 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
22810 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22820 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
22830 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
22840 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
22850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
22860 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
22870 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
22880 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
22890 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
228a0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
228b0 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
228c0 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
228d0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
228e0 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
228f0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
22900 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
22910 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
22920 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
22930 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
22940 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
22950 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
22960 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22970 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72  ImpliesExpr(Expr
22980 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22990 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
229a0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
229b0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
229c0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
229d0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
229e0 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
229f0 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
22a00 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
22a10 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
22a20 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
22a30 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
22a40 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76  tVdbe(Parse*);.v
22a50 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
22a60 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
22a70 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
22a80 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
22a90 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
22aa0 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
22ab0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
22ac0 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
22ad0 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
22ae0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22af0 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
22b00 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
22b10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
22b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
22b30 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
22b40 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
22b50 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
22b60 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
22b70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22b80 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
22b90 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
22ba0 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
22bb0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
22bc0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22bd0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
22be0 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
22bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
22c00 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
22c10 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
22c20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22c30 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
22c40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22c50 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
22c60 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
22c70 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
22c80 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
22c90 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
22ca0 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
22cb0 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
22cc0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
22cd0 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
22ce0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
22cf0 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
22d00 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
22d10 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
22d20 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
22d30 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
22d40 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
22d50 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
22d60 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
22d70 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
22d80 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a  ,i16,u8,u8,u8);.
22d90 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
22da0 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
22db0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
22dc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22dd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
22de0 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
22df0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
22e00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
22e10 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
22e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
22e30 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
22e40 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
22e50 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
22e60 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
22e70 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
22e80 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
22e90 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
22ec0 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
22ed0 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
22ee0 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
22ef0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
22f00 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
22f10 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
22f20 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
22f30 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
22f40 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
22f50 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
22f60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
22f70 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
22f80 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
22f90 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22fa0 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
22fb0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22fc0 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
22fd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22fe0 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
22ff0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
23000 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
23010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
23020 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
23030 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
23040 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23050 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
23060 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
23070 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
23080 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
23090 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
230a0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
230b0 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
230c0 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
230d0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
230e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
230f0 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
23100 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
23110 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
23120 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
23130 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
23140 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
23150 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
23160 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23170 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46  3FuncDefInsert(F
23180 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e  uncDefHash*, Fun
23190 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20  cDef*);.FuncDef 
231a0 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63  *sqlite3FindFunc
231b0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tion(sqlite3*,co
231c0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e  nst char*,int,in
231d0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
231e0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
231f0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
23200 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
23210 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61  qlite3RegisterDa
23220 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28  teTimeFunctions(
23230 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
23240 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61  te3RegisterGloba
23250 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  lFunctions(void)
23260 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
23270 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74  etyCheckOk(sqlit
23280 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
23290 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b  3SafetyCheckSick
232a0 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  OrOk(sqlite3*);.
232b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e  void sqlite3Chan
232c0 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c  geCookie(Parse*,
232d0 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66   int);..#if !def
232e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
232f0 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e  _VIEW) && !defin
23300 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
23310 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c  RIGGER).void sql
23320 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56  ite3MaterializeV
23330 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  iew(Parse*, Tabl
23340 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
23350 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
23360 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
23370 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69  GGER.  void sqli
23380 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28  te3BeginTrigger(
23390 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54  Parse*, Token*,T
233a0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64  oken*,int,int,Id
233b0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a  List*,SrcList*,.
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
233e0 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ,int, int);.  vo
233f0 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
23400 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
23410 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f  TriggerStep*, To
23420 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ken*);.  void sq
23430 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
23440 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
23450 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
23460 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
23470 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72  erPtr(Parse*, Tr
23480 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67  igger*);.  Trigg
23490 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
234a0 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a  ersExist(Parse *
234b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45  , Table*, int, E
234c0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70  xprList*, int *p
234d0 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72  Mask);.  Trigger
234e0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
234f0 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  List(Parse *, Ta
23500 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  ble *);.  void s
23510 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
23520 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
23530 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70  gger *, int, Exp
23540 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62  rList*, int, Tab
23550 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  le *,.          
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29    int, int, int)
23580 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
23590 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
235a0 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72  rect(Parse *, Tr
235b0 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a  igger *, Table *
235c0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
235d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56  ;.  void sqliteV
235e0 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
235f0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
23600 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
23610 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
23620 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53  e3DeleteTriggerS
23630 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  tep(sqlite3*, Tr
23640 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54  iggerStep*);.  T
23650 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
23660 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74  te3TriggerSelect
23670 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  Step(sqlite3*,Se
23680 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65  lect*);.  Trigge
23690 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
236a0 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
236b0 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
236c0 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236f0 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20    Select*,u8);. 
23700 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
23710 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
23720 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
23730 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
23740 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  , Expr*, u8);.  
23750 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
23760 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
23770 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
23780 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20  oken*, Expr*);. 
23790 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
237a0 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
237b0 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
237c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
237d0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
237e0 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
237f0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
23800 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
23810 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
23820 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
23830 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
23840 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
23850 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
23860 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
23870 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
23880 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
23890 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  p)).#else.# defi
238a0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
238b0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
238c0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
238d0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
238e0 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
238f0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
23900 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
23910 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
23920 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
23930 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
23940 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
23950 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
23960 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
23970 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
23980 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
23990 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
239a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
239b0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
239c0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
239d0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
239e0 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
239f0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
23a00 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
23a10 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
23a20 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
23a30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
23a40 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
23a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
23a60 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
23a70 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
23a80 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
23a90 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
23aa0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
23ab0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
23ac0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
23ad0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
23ae0 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
23af0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
23b00 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
23b10 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
23b20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
23b30 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
23b40 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
23b50 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
23b60 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
23b70 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
23b80 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
23b90 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
23ba0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
23bb0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
23bc0 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
23bd0 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
23be0 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
23bf0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
23c00 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
23c10 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
23c20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23c30 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
23c40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23c50 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
23c60 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
23c70 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
23c80 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
23c90 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
23ca0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
23cb0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
23cc0 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
23cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
23ce0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
23cf0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
23d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
23d10 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
23d20 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
23d30 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
23d40 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
23d50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23d60 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
23d70 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
23d80 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
23d90 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
23da0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
23db0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
23dc0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
23dd0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
23de0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23df0 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
23e00 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
23e10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
23e20 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
23e30 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
23e40 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
23e50 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
23e60 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
23e70 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
23e80 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
23e90 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
23ea0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
23eb0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
23ec0 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
23ed0 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
23ee0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
23ef0 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
23f00 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
23f10 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
23f20 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
23f30 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
23f40 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
23f50 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
23f60 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
23f70 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
23f80 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
23f90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23fa0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
23fb0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
23fc0 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
23fd0 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75  ouble);.#endif.u
23fe0 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
23ff0 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a  ToInt(LogEst);..
24000 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
24010 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
24020 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
24030 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
24040 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
24050 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
24060 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
24070 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
24080 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
24090 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
240a0 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
240b0 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
240c0 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
240d0 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
240e0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
240f0 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
24100 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
24110 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
24120 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
24130 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
24140 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
24150 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
24160 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
24170 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
24180 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
24190 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
241a0 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
241b0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
241c0 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
241d0 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
241e0 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
241f0 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
24200 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
24210 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
24220 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
24230 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
24240 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
24250 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
24260 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
24270 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
24280 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
24290 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
242a0 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
242b0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
242c0 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
242d0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
242e0 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
242f0 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
24300 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
24310 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
24320 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
24330 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
24340 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
24350 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a  finityStr(Vdbe *
24360 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64  , Index *);.void
24370 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
24380 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
24390 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
243a0 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
243b0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
243c0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
243d0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
243e0 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
243f0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
24400 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
24410 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
24420 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
24430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
24440 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
24450 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
24460 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
24470 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
24480 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
24490 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
244a0 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
244b0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
244c0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
244d0 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
244e0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  e3*,int);.void *
244f0 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
24500 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
24510 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
24520 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
24530 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
24540 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
24550 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
24560 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
24570 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
24580 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
24590 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20  ST) .const char 
245a0 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
245b0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
245c0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
245d0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
245e0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
245f0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
24600 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
24610 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
24620 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
24630 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
24640 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
24650 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
24660 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
24670 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
24680 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
24690 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
246a0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
246b0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
246c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
246d0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
246e0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
246f0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
24700 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24710 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
24720 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
24730 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
24740 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
24750 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
24760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
24770 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
24780 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
24790 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
247a0 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
247b0 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
247c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
247d0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
247e0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
247f0 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
24800 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
24810 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
24820 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
24830 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
24840 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
24850 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
24860 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
24870 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
24880 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
24890 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
248a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
248b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
248c0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
248d0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
248e0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
248f0 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
24900 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
24910 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
24920 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
24930 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
24940 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
24950 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
24960 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
24970 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
24980 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
24990 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
249a0 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
249c0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
249d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
249e0 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
249f0 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
24a00 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
24a10 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
24a20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
24a30 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
24a40 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20  qlite3 *);.char 
24a50 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
24a60 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
24a70 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
24a80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
24a90 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
24aa0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
24ab0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
24ac0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
24ad0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
24ae0 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
24af0 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
24b00 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
24b10 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
24b20 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
24b30 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
24b40 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
24b50 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
24b60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
24b70 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
24b80 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
24b90 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
24ba0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24bb0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
24bc0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
24bd0 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
24be0 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
24bf0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
24c00 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
24c10 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
24c20 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
24c30 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
24c40 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
24c50 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
24c60 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
24c70 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
24c80 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
24c90 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
24ca0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
24cb0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
24cc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
24cd0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
24ce0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
24cf0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
24d00 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
24d10 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
24d20 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
24d30 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
24d40 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
24d50 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
24d60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
24d70 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
24d80 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
24d90 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
24da0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
24db0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
24dc0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
24dd0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
24de0 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
24df0 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
24e00 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
24e10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
24e20 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
24e30 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
24e40 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
24e50 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
24e60 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
24e70 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24e80 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
24e90 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
24ea0 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
24eb0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
24ec0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
24ed0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
24ee0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
24ef0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
24f00 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
24f10 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
24f20 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
24f30 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
24f40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
24f50 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
24f60 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
24f70 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
24f80 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
24f90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24fa0 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
24fb0 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
24fc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24fd0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
24fe0 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
24ff0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
25000 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
25010 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
25020 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
25030 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
25040 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
25050 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
25060 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
25070 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
25080 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
25090 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a  st char*, u8*);.
250a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
250b0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
250c0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
250d0 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
250e0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
250f0 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
25100 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
25110 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
25120 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
25130 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
25140 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
25150 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
25160 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
25170 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
25180 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
25190 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
251a0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
251b0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
251c0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
251d0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
251e0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
251f0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
25200 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
25210 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
25220 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
25230 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25240 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
25250 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
25260 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25270 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
25280 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
25290 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
252a0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
252b0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
252c0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
252d0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
252e0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
252f0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
25300 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
25310 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25320 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
25330 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
25340 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
25350 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
25360 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
25370 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
25380 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
25390 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
253a0 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
253b0 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
253c0 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
253d0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
253e0 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
253f0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
25400 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
25410 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29  d *, .  void (*)
25420 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
25430 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
25440 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
25450 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
25460 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
25470 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
25480 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
25490 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
254a0 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
254b0 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c  uctor.);.int sql
254c0 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
254d0 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
254e0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
254f0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
25500 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
25510 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
25520 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c  trAccum*, char*,
25530 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
25540 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
25550 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
25560 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
25570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
25580 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
25590 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
255a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
255b0 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61 63 65  lite3AppendSpace
255c0 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b  (StrAccum*,int);
255d0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
255e0 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
255f0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
25600 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
25610 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
25620 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
25630 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
25640 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
25650 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
25660 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
25670 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
25680 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
25690 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
256a0 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
256b0 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
256c0 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
256d0 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
256e0 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
256f0 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64  nst u8 *);..#ifd
25700 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25710 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
25720 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
25730 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  yzeFunctions(voi
25740 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
25750 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75  tat4ProbeSetValu
25760 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c  e(Parse*,Index*,
25770 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
25780 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e  ,Expr*,u8,int,in
25790 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
257a0 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
257b0 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
257c0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
257d0 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
257e0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
257f0 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
25800 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
25810 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
25820 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
25830 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
25840 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23  ite3_value**);.#
25850 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
25860 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
25870 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
25880 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64  d parser.*/.void
25890 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
258a0 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
258b0 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4));.void sqlite
258c0 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
258d0 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
258e0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
258f0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
25900 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
25910 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
25920 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
25930 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
25940 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
25950 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
25960 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
25970 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
25980 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
25990 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
259a0 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
259b0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
259c0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
259d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
259e0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
259f0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
25a00 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
25a10 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
25a20 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
25a30 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
25a40 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
25a50 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
25a60 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
25a70 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
25a80 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
25a90 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
25aa0 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
25ab0 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
25ac0 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
25ad0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
25ae0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
25af0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
25b00 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
25b10 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
25b20 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
25b30 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
25b40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25b50 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
25b60 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
25b70 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
25b80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25b90 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
25ba0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25bb0 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
25bc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
25bd0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
25be0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
25bf0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
25c00 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25c10 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
25c20 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
25c30 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
25c40 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
25c50 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
25c60 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
25c70 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
25c80 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
25c90 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
25ca0 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
25cb0 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
25cc0 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
25cd0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
25ce0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
25cf0 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
25d00 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
25d10 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
25d20 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
25d30 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
25d40 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
25d50 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
25d60 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
25d70 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
25d80 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
25d90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
25da0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
25db0 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
25dc0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
25dd0 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
25de0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
25df0 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
25e00 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
25e10 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
25e20 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
25e30 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
25e40 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
25e50 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
25e60 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
25e70 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
25e80 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
25e90 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69  s==0).#endif.voi
25ea0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
25eb0 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
25ec0 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
25ed0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
25ee0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
25ef0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
25f00 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
25f10 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
25f20 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
25f30 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
25f40 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
25f50 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25f60 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
25f70 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
25f80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
25f90 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
25fa0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
25fb0 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
25fc0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
25fd0 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
25fe0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
25ff0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
26000 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
26010 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
26020 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
26030 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
26040 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
26050 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
26060 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
26070 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
26080 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
26090 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
260a0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
260b0 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
260c0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
260d0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
260e0 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
260f0 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
26100 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
26110 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
26120 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
26130 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
26140 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
26150 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
26160 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
26170 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
26180 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
26190 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
261a0 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
261b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
261c0 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
261d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
261e0 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
261f0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
26200 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
26210 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
26220 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
26230 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
26240 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
26250 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
26260 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
26270 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
26280 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
26290 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
262a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
262b0 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
262c0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
262d0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
262e0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
262f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
26300 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
26310 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
26320 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
26330 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
26340 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
26350 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
26360 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
26370 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
26380 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
26390 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
263a0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
263b0 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
263c0 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
263d0 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
263e0 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
263f0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
26400 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
26410 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
26420 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
26430 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
26440 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
26450 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
26460 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
26470 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
26480 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
26490 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
264a0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
264b0 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
264c0 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
264d0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
264e0 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
264f0 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
26500 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
26510 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
26520 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
26530 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
26540 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
26550 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
26560 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
26570 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
26580 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76  lity is .** prov
26590 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
265a0 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
265b0 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
265c0 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
265d0 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
265e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
265f0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
26600 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
26610 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
26620 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
26630 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
26640 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
26650 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
26660 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
26670 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
26680 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
26690 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
266a0 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
266b0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
266c0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
266d0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
266e0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
266f0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26700 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
26710 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
26720 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
26730 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
26740 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
26750 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
26760 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26770 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
26780 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
26790 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
267a0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
267b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
267c0 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
267d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
267e0 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
267f0 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
26800 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
26810 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
26820 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
26830 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26840 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
26850 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
26860 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
26870 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
26880 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
26890 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
268a0 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
268b0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
268c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
268d0 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
268e0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
268f0 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
26900 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
26910 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
26920 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
26930 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
26940 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
26950 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
26960 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
26970 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
26980 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
26990 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
269a0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
269b0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
269c0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
269d0 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
269e0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
269f0 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
26a00 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
26a10 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
26a20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
26a30 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
26a40 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
26a50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26a60 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
26a70 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
26a80 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
26a90 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
26aa0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
26ab0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
26ac0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26ad0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
26ae0 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
26af0 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
26b00 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
26b10 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
26b20 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
26b30 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
26b40 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
26b50 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
26b60 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
26b70 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
26b80 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
26b90 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
26ba0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
26bb0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
26bc0 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
26bd0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
26be0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
26bf0 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
26c00 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
26c10 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
26c20 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
26c30 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
26c40 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
26c50 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
26c60 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
26c70 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
26c80 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
26c90 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
26ca0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
26cb0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
26cc0 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
26cd0 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
26ce0 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
26cf0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
26d00 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
26d10 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
26d20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
26d30 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
26d40 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
26d50 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
26d60 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
26d70 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
26d80 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
26d90 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
26da0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
26db0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
26dc0 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
26dd0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
26de0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
26df0 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64  32, int*);..#ifd
26e00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
26e10 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
26e20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
26e30 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
26e40 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
26e50 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
26e60 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
26e70 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
26e80 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
26e90 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
26ea0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
26eb0 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
26ec0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
26ed0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
26ee0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
26ef0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
26f00 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
26f10 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
26f20 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
26f30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
26f40 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
26f50 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
26f60 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
26f70 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
26f80 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26f90 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
26fa0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
26fb0 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
26fc0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
26fd0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
26fe0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
26ff0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
27000 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
27010 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
27020 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
27030 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
27040 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
27050 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
27060 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
27070 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
27080 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
27090 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
270a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
270b0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
270c0 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
270d0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
270e0 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
270f0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
27100 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
27110 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27120 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
27130 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
27140 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
27150 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
27160 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
27170 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
27180 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
27190 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
271a0 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
271b0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
271c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
271d0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
271e0 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
271f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27200 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
27210 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
27220 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27230 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
27240 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27250 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
27260 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
27270 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27280 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
27290 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
272a0 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
272b0 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
272c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
272d0 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
272e0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
272f0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
27300 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
27310 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
27320 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
27330 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
27340 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
27350 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
27360 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
27370 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
27380 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
27390 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
273a0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
273b0 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
273c0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
273d0 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
273e0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
273f0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
27400 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
27410 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27420 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
27430 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
27440 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
27450 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
27460 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
27470 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
27480 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
27490 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
274a0 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
274b0 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
274c0 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
274d0 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
274e0 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
274f0 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
27500 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
27510 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
27520 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27530 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
27540 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
27550 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
27560 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
27570 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
27580 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
27590 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
275a0 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
275b0 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
275c0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
275d0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
275e0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
275f0 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
27600 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
27610 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
27620 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
27630 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
27640 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
27650 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
27660 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
27670 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
27680 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
27690 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
276a0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
276b0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
276c0 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
276d0 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
276e0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
276f0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
27700 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
27710 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
27720 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
27730 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
27740 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
27750 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
27760 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
27770 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
27780 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
27790 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
277a0 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
277b0 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
277c0 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
277d0 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
277e0 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
277f0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
27800 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
27810 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
27820 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
27830 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
27840 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
27850 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
27860 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
27870 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
27880 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
27890 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
278a0 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
278b0 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
278c0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
278d0 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
278e0 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
278f0 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
27900 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
27910 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
27920 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
27930 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
27940 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
27950 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
27960 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
27970 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
27980 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
27990 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
279a0 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
279b0 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
279c0 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
279d0 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
279e0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
279f0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
27a00 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
27a10 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
27a20 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
27a30 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
27a40 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
27a50 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
27a60 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
27a70 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
27a80 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
27a90 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
27aa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
27ab0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
27ac0 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
27ad0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
27ae0 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
27af0 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
27b00 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
27b10 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
27b20 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
27b30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
27b40 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
27b50 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
27b60 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
27b70 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
27b80 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
27b90 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
27ba0 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
27bb0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
27bc0 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
27bd0 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
27be0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
27bf0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
27c00 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
27c10 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
27c20 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
27c30 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
27c40 63 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  c */../*.** Thre
27c50 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
27c60 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
27c70 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
27c80 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
27c90 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
27ca0 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
27cb0 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
27cc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
27cd0 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
27ce0 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
27cf0 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
27d00 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
27d10 2a 2f 0a                                         */.