/ Hex Artifact Content
Login

Artifact 439ad3b98d2342862ce11955ab35948a8e82a052:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75 73  .** The previous
0540: 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20 77   paragraph was w
0550: 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e 20  ritten in 2005. 
0560: 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70 68   (This paragraph
0570: 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 6f   is written.** o
0580: 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20 54  n 2008-11-28.) T
0590: 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20 4c  hese days, all L
05a0: 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75 70  inux kernels sup
05b0: 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65 73  port large files
05c0: 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f 75  , so.** you shou
05d0: 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61 76  ld probably leav
05e0: 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20 20  e LFS enabled.  
05f0: 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64 65  But some embedde
0600: 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67 68  d platforms migh
0610: 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69 6e  t.** lack LFS in
0620: 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
0630: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0640: 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20 73  FS macro might s
0650: 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e 0a  till be useful..
0660: 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73  **.** Similar is
0670: 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53   true for Mac OS
0680: 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79   X.  LFS is only
0690: 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61   supported on Ma
06a0: 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74  c OS X 9 and lat
06b0: 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  er..*/.#ifndef S
06c0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
06d0: 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  S.# define _LARG
06e0: 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23  E_FILE       1.#
06f0: 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46   ifndef _FILE_OF
0700: 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65  FSET_BITS.#   de
0710: 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45  fine _FILE_OFFSE
0720: 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69  T_BITS 64.# endi
0730: 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47  f.# define _LARG
0740: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23  EFILE_SOURCE 1.#
0750: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  endif../*.** For
0760: 20 4d 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f   MinGW, check to
0770: 20 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 69   see if we can i
0780: 6e 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65  nclude the heade
0790: 72 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  r file containin
07a0: 67 20 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e  g its.** version
07b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d   information, am
07c0: 6f 6e 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73  ong other things
07d0: 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69  .  Normally, thi
07e0: 73 20 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57  s internal MinGW
07f0: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0800: 77 6f 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20  would [only] be 
0810: 69 6e 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74  included automat
0820: 69 63 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20  ically by other 
0830: 4d 69 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20  MinGW header.** 
0840: 66 69 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20  files; however, 
0850: 74 68 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65  the contained ve
0860: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
0870: 6e 20 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65  n is now require
0880: 64 20 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61  d by this.** hea
0890: 64 65 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b  der file to work
08a0: 20 61 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63   around binary c
08b0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 69 73 73  ompatibility iss
08c0: 75 65 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20  ues (see below) 
08d0: 61 6e 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74  and.** this is t
08e0: 68 65 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61  he only known wa
08f0: 79 20 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62  y to reliably ob
0900: 74 61 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65  tain it.  This e
0910: 6e 74 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a  ntire #if block.
0920: 2a 2a 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70  ** would be comp
0930: 6c 65 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61  letely unnecessa
0940: 72 79 20 69 66 20 74 68 65 72 65 20 77 61 73 20  ry if there was 
0950: 61 6e 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66  any other way of
0960: 20 64 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69   detecting.** Mi
0970: 6e 47 57 20 76 69 61 20 74 68 65 69 72 20 70 72  nGW via their pr
0980: 65 70 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e  eprocessor (e.g.
0990: 20 69 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69   if they customi
09a0: 7a 65 64 20 74 68 65 69 72 20 47 43 43 20 74 6f  zed their GCC to
09b0: 20 64 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20   define.** some 
09c0: 4d 69 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d  MinGW-specific m
09d0: 61 63 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f  acros).  When co
09e0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47  mpiling for MinG
09f0: 57 2c 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a  W, either the.**
0a00: 20 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f   _HAVE_MINGW_H o
0a10: 72 20 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48  r _HAVE__MINGW_H
0a20: 20 28 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61   (note the extra
0a30: 20 75 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63   underscore) mac
0a40: 72 6f 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65  ro must be.** de
0a50: 66 69 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65  fined; otherwise
0a60: 2c 20 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63  , detection of c
0a70: 6f 6e 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66  onditions specif
0a80: 69 63 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c  ic to MinGW will
0a90: 20 62 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e   be.** disabled.
0aa0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0ab0: 5f 48 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23  _HAVE_MINGW_H).#
0ac0: 20 69 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e   include "mingw.
0ad0: 68 22 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  h".#elif defined
0ae0: 28 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29  (_HAVE__MINGW_H)
0af0: 0a 23 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e  .# include "_min
0b00: 67 77 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a  gw.h".#endif../*
0b10: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65  .** For MinGW ve
0b20: 72 73 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68  rsion 4.x (and h
0b30: 69 67 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f  igher), check to
0b40: 20 73 65 65 20 69 66 20 74 68 65 20 5f 55 53 45   see if the _USE
0b50: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a  _32BIT_TIME_T.**
0b60: 20 64 65 66 69 6e 65 20 69 73 20 72 65 71 75 69   define is requi
0b70: 72 65 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  red to maintain 
0b80: 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69  binary compatibi
0b90: 6c 69 74 79 20 77 69 74 68 20 74 68 65 20 4d 53  lity with the MS
0ba0: 56 43 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69  VC runtime.** li
0bb0: 62 72 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e  brary in use (e.
0bc0: 67 2e 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58  g. for Windows X
0bd0: 50 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  P)..*/.#if !defi
0be0: 6e 65 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54  ned(_USE_32BIT_T
0bf0: 49 4d 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e  IME_T) && !defin
0c00: 65 64 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49  ed(_USE_64BIT_TI
0c10: 4d 45 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64  ME_T) && \.    d
0c20: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
0c30: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36  & !defined(_WIN6
0c40: 34 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69  4) && \.    defi
0c50: 6e 65 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f  ned(__MINGW_MAJO
0c60: 52 5f 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f  R_VERSION) && __
0c70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0c80: 49 4f 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20  ION >= 4 && \.  
0c90: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43    defined(__MSVC
0ca0: 52 54 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f  RT__).# define _
0cb0: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0cc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20  .#endif../* The 
0cd0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e  public SQLite in
0ce0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46  terface.  The _F
0cf0: 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20  ILE_OFFSET_BITS 
0d00: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d10: 72 0a 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e  r.** first in QN
0d20: 58 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55  X.  Also, the _U
0d30: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20  SE_32BIT_TIME_T 
0d40: 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61  macro must appea
0d50: 72 20 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d  r first for.** M
0d60: 69 6e 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  inGW..*/.#includ
0d70: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f  e "sqlite3.h"../
0d80: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65  *.** Include the
0d90: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68   configuration h
0da0: 65 61 64 65 72 20 6f 75 74 70 75 74 20 62 79 20  eader output by 
0db0: 27 63 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77  'configure' if w
0dc0: 65 27 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  e're using the.*
0dd0: 2a 20 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64  * autoconf-based
0de0: 20 62 75 69 6c 64 0a 2a 2f 0a 23 69 66 64 65 66   build.*/.#ifdef
0df0: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0e00: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0e10: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0e20: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
0e30: 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20  iteLimit.h"../* 
0e40: 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e 63 65  Disable nuisance
0e50: 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42 6f 72   warnings on Bor
0e60: 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 20 2a  land compilers *
0e70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
0e80: 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70 72 61  BORLANDC__).#pra
0e90: 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20 2f 2a  gma warn -rch /*
0ea0: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
0eb0: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
0ec0: 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64 69 74  n -ccc /* Condit
0ed0: 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 74 72  ion is always tr
0ee0: 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f 0a 23  ue or false */.#
0ef0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61 75 73  pragma warn -aus
0f00: 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76 61 6c   /* Assigned val
0f10: 75 65 20 69 73 20 6e 65 76 65 72 20 75 73 65 64  ue is never used
0f20: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
0f30: 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61 72 69   -csu /* Compari
0f40: 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20 75 6e  ng signed and un
0f50: 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61 67 6d  signed */.#pragm
0f60: 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a 20 53  a warn -spa /* S
0f70: 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e 74 65  uspicious pointe
0f80: 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a 2f 0a  r arithmetic */.
0f90: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64 65  #endif../* Neede
0fa0: 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 65  d for various de
0fb0: 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a  finitions... */.
0fc0: 23 69 66 6e 64 65 66 20 5f 47 4e 55 5f 53 4f 55  #ifndef _GNU_SOU
0fd0: 52 43 45 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e  RCE.# define _GN
0fe0: 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  U_SOURCE.#endif.
0ff0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
1000: 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65  penBSD__) && !de
1010: 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43  fined(_BSD_SOURC
1020: 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44  E).# define _BSD
1030: 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a  _SOURCE.#endif..
1040: 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74  /*.** Include st
1050: 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69  andard header fi
1060: 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79  les as necessary
1070: 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f  .*/.#ifdef HAVE_
1080: 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64  STDINT_H.#includ
1090: 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e  e <stdint.h>.#en
10a0: 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f  dif.#ifdef HAVE_
10b0: 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c  INTTYPES_H.#incl
10c0: 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e  ude <inttypes.h>
10d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
10e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
10f0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
1100: 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f  cast pointers to
1110: 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a   integers and.**
1120: 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69   integers to poi
1130: 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20  nters.  The way 
1140: 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69  you do this vari
1150: 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70  es from one comp
1160: 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e  iler.** to the n
1170: 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20  ext, so we have 
1180: 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f  developed the fo
1190: 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23  llowing set of #
11a0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  if statements.**
11b0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70   to generate app
11c0: 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20  ropriate macros 
11d0: 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65  for a wide range
11e0: 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a   of compilers..*
11f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74  *.** The correct
1200: 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64   "ANSI" way to d
1210: 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65  o this is to use
1220: 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79   the intptr_t ty
1230: 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  pe. .** Unfortun
1240: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1250: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1260: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1270: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1280: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1290: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
12a0: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
12b0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
12c0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
12d0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
12e0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
12f0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1300: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1310: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1320: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1330: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1340: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1350: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1360: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1370: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1380: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1390: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
13a0: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
13b0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
13c0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
13d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
13e0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
13f0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1400: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
1410: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1420: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1430: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
1440: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
1450: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1460: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
1470: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
1480: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
1490: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
14a0: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
14b0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
14c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
14d0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
14e0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
14f0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
1500: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
1510: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1520: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1530: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
1540: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
1550: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1560: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
1570: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
1580: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
1590: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
15a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
15b0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
15c0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
15d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
15e0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
15f0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
1600: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
1620: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
1630: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
1640: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
1650: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
1660: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
1670: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
1680: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1690: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
16a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
16b0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
16c0: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
16d0: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
16e0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
16f0: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
1700: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
1710: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
1720: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
1730: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
1740: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
1750: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23  ined(_MSC_VER).#
1760: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1770: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c  NOINLINE  __decl
1780: 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23  spec(noinline).#
1790: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53  else.#  define S
17a0: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23  QLITE_NOINLINE.#
17b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
17c0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
17d0: 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65  FE macro must be
17e0: 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31   defined as 0, 1
17f0: 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61  , or 2..** 0 mea
1800: 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70  ns mutexes are p
1810: 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
1820: 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61  le and the libra
1830: 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74  ry is never.** t
1840: 68 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65  hreadsafe.  1 me
1850: 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20  ans the library 
1860: 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68  is serialized wh
1870: 69 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65  ich is the highe
1880: 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74  st.** level of t
1890: 68 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20  hreadsafety.  2 
18a0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
18b0: 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64  y is multithread
18c0: 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  ed - multiple.**
18d0: 20 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65   threads can use
18e0: 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20   SQLite as long 
18f0: 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64  as no two thread
1900: 73 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65  s try to use the
1910: 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73   same.** databas
1920: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20  e connection at 
1930: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a  the same time..*
1940: 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  *.** Older versi
1950: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
1960: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
1970: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
1980: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
1990: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a  hat for legacy..
19a0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
19b0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
19c0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
19d0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
19e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
19f0: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
1a00: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
1a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1a20: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
1a30: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
1a40: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
1a50: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
1a60: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
1a70: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
1a80: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
1a90: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
1aa0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
1ab0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
1ac0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
1ad0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
1ae0: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
1af0: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
1b00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
1b10: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1b20: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
1b30: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   The SQLITE_DEFA
1b40: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61  ULT_MEMSTATUS ma
1b50: 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69  cro must be defi
1b60: 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30 20  ned as either 0 
1b70: 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65  or 1..** It dete
1b80: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
1b90: 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75 72  r not the featur
1ba0: 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a  es related to .*
1bb0: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
1bc0: 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61 76  MEMSTATUS are av
1bd0: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
1be0: 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20  lt or not. This 
1bf0: 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20  value can.** be 
1c00: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72 75  overridden at ru
1c10: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
1c20: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
1c30: 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65   API..*/.#if !de
1c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
1c50: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
1c60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1c70: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1c80: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
1c90: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
1ca0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1cb0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
1cc0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
1cd0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
1ce0: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
1cf0: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
1d00: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
1d10: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1d20: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
1d30: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
1d40: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
1d50: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
1d60: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1d70: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
1d80: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
1d90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
1da0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
1db0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
1dc0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
1dd0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
1de0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
1df0: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
1e00: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
1e10: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
1e20: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
1e30: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
1e40: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
1e50: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
1e60: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
1e70: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
1e80: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
1e90: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
1ea0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
1eb0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
1ec0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
1ed0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
1ee0: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
1ef0: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
1f00: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
1f10: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
1f20: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
1f30: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
1f40: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
1f50: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
1f60: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
1f70: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
1f80: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
1f90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1fa0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1fb0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1fc0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1fd0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1fe0: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1ff0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2000: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2010: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2020: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2030: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2040: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2050: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2060: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2070: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
2080: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
2090: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
20a0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
20b0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
20c0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
20d0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
20e0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
20f0: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2100: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2110: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2120: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2130: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2140: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2150: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2160: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
2180: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
2190: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
21a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
21b0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
21c0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
21d0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
21e0: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
21f0: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2200: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2210: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2220: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2230: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2240: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2250: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2260: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2270: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
2280: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
2290: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
22a0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
22b0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
22c0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
22d0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
22e0: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
22f0: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2300: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2310: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2320: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2330: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2340: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2350: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2360: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2370: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
2380: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
2390: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
23a0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
23b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
23c0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
23d0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
23e0: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
23f0: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2400: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2410: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2420: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2430: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2440: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2450: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2460: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2470: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
2480: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
2490: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
24a0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
24b0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
24c0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
24d0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
24e0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
24f0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2500: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2510: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2520: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2530: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2540: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2550: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2560: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2570: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
2580: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
2590: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
25a0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
25b0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
25c0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25d0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
25e0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
25f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2600: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2610: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2620: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2640: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2650: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2660: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2670: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2680: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2690: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
26a0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
26b0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
26c0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
26d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
26e0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
26f0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2700: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2710: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2720: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2730: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2740: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2750: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2760: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2770: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2780: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2790: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
27a0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
27b0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
27c0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
27d0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
27e0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
27f0: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2800: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2810: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2820: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2830: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2840: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2850: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2860: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2870: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2880: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2890: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
28a0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
28b0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
28c0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
28d0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
28e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
28f0: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2900: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2910: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2920: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2930: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2940: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2950: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2960: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2970: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2980: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2990: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
29a0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
29b0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
29c0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
29d0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
29e0: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
29f0: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2a00: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2a10: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2a20: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2a30: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2a40: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2a50: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2a60: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2a70: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2a80: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2a90: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2aa0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ab0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ac0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ad0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2ae0: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2af0: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2b00: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2b10: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2b20: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b30: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2b40: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2b50: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2b60: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2b70: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2b80: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2b90: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2ba0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2bb0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2bc0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2bd0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
2be0: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
2bf0: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
2c00: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
2c10: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
2c20: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
2c30: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
2c40: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
2c50: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
2c60: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
2c70: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
2c80: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
2c90: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
2ca0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
2cb0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
2cc0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
2cd0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
2ce0: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
2cf0: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
2d00: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
2d10: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
2d20: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
2d30: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
2d40: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2d50: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2d60: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2d70: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
2d80: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
2d90: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
2da0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
2db0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
2dc0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
2dd0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
2de0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
2df0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
2e00: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
2e10: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
2e20: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
2e30: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
2e40: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
2e50: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
2e60: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
2e70: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
2e80: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
2e90: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
2ea0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
2eb0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
2ec0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
2ed0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
2ee0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
2ef0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
2f00: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
2f10: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
2f20: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
2f30: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
2f40: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
2f50: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
2f60: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
2f70: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
2f80: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
2f90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
2fa0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
2fb0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
2fc0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
2fd0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
2fe0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
2ff0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3000: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3010: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3020: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3030: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3040: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3050: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3060: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3070: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3080: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3090: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
30a0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
30b0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
30c0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
30d0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
30e0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
30f0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3100: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3110: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3120: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3130: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
3140: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
3150: 20 69 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65   input is a inte
3160: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
3170: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
3180: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
3190: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
31a0: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
31b0: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
31c0: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
31d0: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
31e0: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
31f0: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
3200: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
3210: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
3220: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
3230: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
3240: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
3250: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
3260: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
3270: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
3280: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
3290: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
32a0: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
32b0: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
32c0: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
32d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
32e0: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
32f0: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
3300: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
3310: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
3320: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
3330: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
3340: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
3350: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
3360: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
3370: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
3380: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
3390: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
33a0: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
33b0: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
33c0: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
33d0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
33e0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
33f0: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
3400: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
3410: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
3420: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
3430: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
3440: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
3450: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
3460: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
3470: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
3480: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
3490: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
34a0: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
34b0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
34c0: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
34d0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
34e0: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
34f0: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
3500: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3510: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
3520: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
3530: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
3540: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
3550: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
3560: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
3570: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
3580: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
3590: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
35a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
35b0: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
35c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
35d0: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
35e0: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
35f0: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
3600: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
3610: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
3620: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
3630: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
3640: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
3650: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
3660: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
3670: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
3680: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
3690: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
36a0: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
36b0: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
36c0: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
36d0: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
36e0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
36f0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
3700: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
3710: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3720: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
3730: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3740: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
3750: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
3760: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3770: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
3780: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
3790: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
37a0: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
37b0: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
37c0: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
37d0: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
37e0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
37f0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
3800: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
3810: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
3820: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
3830: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
3840: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
3850: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
3860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
3870: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
3880: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
3890: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
38a0: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
38b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
38c0: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
38d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
38e0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
38f0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
3900: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
3910: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
3920: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
3930: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
3940: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
3950: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
3960: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
3970: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
3980: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
3990: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
39a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
39b0: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
39c0: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
39d0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
39e0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
39f0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
3a00: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
3a10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3a20: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
3a30: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3a40: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
3a50: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3a60: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
3a70: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
3a80: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3a90: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
3aa0: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
3ab0: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
3ac0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
3ad0: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
3ae0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
3af0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
3b00: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
3b10: 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f  ), set it .** to
3b20: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
3b30: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
3b40: 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52  =3 || SQLITE_THR
3b50: 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64  EADSAFE==0.# und
3b60: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ef SQLITE_MAX_WO
3b70: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
3b80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
3b90: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
3ba0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
3bb0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
3bc0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
3bd0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
3be0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a  ORKER_THREADS 8.
3bf0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
3c00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
3c10: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
3c20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
3c30: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
3c40: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
3c50: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3c60: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53  WORKER_THREADS>S
3c70: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
3c80: 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66  _THREADS.# undef
3c90: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
3ca0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
3cb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
3cc0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51  ORKER_THREADS SQ
3cd0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
3ce0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64  KER_THREADS.#end
3cf0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  if.../*.** GCC d
3d00: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
3d10: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
3d20: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
3d30: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
3d40: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
3d50: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
3d60: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
3d70: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
3d80: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
3d90: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
3da0: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
3db0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
3dc0: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
3dd0: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
3de0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64  o numbers..*/.#d
3df0: 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28  efine MIN(A,B) (
3e00: 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)<(B)?(A):(B))
3e10: 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42  .#define MAX(A,B
3e20: 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28  ) ((A)>(B)?(A):(
3e30: 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  B))../*.** Check
3e40: 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20   to see if this 
3e50: 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43  machine uses EBC
3e60: 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69  DIC.  (Yes, beli
3e70: 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74  eve it or.** not
3e80: 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  , there are stil
3e90: 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74  l machines out t
3ea0: 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42  here that use EB
3eb0: 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41  CDIC.).*/.#if 'A
3ec0: 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65  ' == '\301'.# de
3ed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44  fine SQLITE_EBCD
3ee0: 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  IC 1.#else.# def
3ef0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49  ine SQLITE_ASCII
3f00: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
3f10: 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f   Integers of kno
3f20: 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65  wn sizes.  These
3f30: 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20   typedefs might 
3f40: 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69  change for archi
3f50: 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72  tectures.** wher
3f60: 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79  e the sizes very
3f70: 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20  .  Preprocessor 
3f80: 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c  macros are avail
3f90: 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65  able so that the
3fa0: 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65  .** types can be
3fb0: 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65   conveniently re
3fc0: 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  defined at compi
3fd0: 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74  le-type.  Like t
3fe0: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  his:.**.**      
3ff0: 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52     cc '-DUINTPTR
4000: 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20  _TYPE=long long 
4010: 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e  int' ....*/.#ifn
4020: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a  def UINT32_TYPE.
4030: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
4040: 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T32_T.#  define 
4050: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74  UINT32_TYPE uint
4060: 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  32_t.# else.#  d
4070: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
4080: 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23  E unsigned int.#
4090: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
40a0: 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  fndef UINT16_TYP
40b0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
40c0: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
40d0: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69  e UINT16_TYPE ui
40e0: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
40f0: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
4100: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
4110: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
4120: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
4130: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
4140: 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20   HAVE_INT16_T.# 
4150: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
4160: 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  PE int16_t.# els
4170: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  e.#  define INT1
4180: 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74  6_TYPE short int
4190: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
41a0: 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59  #ifndef UINT8_TY
41b0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
41c0: 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  UINT8_T.#  defin
41d0: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e  e UINT8_TYPE uin
41e0: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
41f0: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4200: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
4210: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4220: 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a  fndef INT8_TYPE.
4230: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4240: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  8_T.#  define IN
4250: 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23  T8_TYPE int8_t.#
4260: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
4270: 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64  INT8_TYPE signed
4280: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
4290: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e  ndif.#ifndef LON
42a0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64  GDOUBLE_TYPE.# d
42b0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
42c0: 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c  _TYPE long doubl
42d0: 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66  e.#endif.typedef
42e0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
42f0: 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38  4;          /* 8
4300: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
4310: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
4320: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36  sqlite_uint64 u6
4330: 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  4;         /* 8-
4340: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
4350: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
4360: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32   UINT32_TYPE u32
4370: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34  ;           /* 4
4380: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
4390: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
43a0: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31  f UINT16_TYPE u1
43b0: 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  6;           /* 
43c0: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
43d0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
43e0: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31  ef INT16_TYPE i1
43f0: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  6;            /*
4400: 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
4410: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4420: 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b  f UINT8_TYPE u8;
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4440: 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  1-byte unsigned 
4450: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4460: 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b  ef INT8_TYPE i8;
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4480: 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
4490: 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nteger */../*.**
44a0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
44b0: 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e  is a u64 constan
44c0: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61  t that is the ma
44d0: 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a  ximum u64 value.
44e0: 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  ** that can be s
44f0: 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77  tored in a u32 w
4500: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64  ithout loss of d
4510: 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  ata.  The value.
4520: 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30  ** is 0x00000000
4530: 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62  ffffffff.  But b
4540: 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73  ecause of quirks
4550: 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65   of some compile
4560: 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74  rs, we.** have t
4570: 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  o specify the va
4580: 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20  lue in the less 
4590: 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72  intuitive manner
45a0: 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69   shown:.*/.#defi
45b0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ne SQLITE_MAX_U3
45c0: 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33  2  ((((u64)1)<<3
45d0: 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  2)-1)../*.** The
45e0: 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74   datatype used t
45f0: 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65  o store estimate
4600: 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  s of the number 
4610: 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20  of rows in a.** 
4620: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
4630: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69   This is an unsi
4640: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70  gned integer typ
4650: 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66  e.  For 99.9% of
4660: 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61  .** the world, a
4670: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
4680: 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20  is sufficient.  
4690: 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74  But a 64-bit int
46a0: 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75  eger.** can be u
46b0: 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  sed at compile-t
46c0: 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a  ime if desired..
46d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
46e0: 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79  _64BIT_STATS. ty
46f0: 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e  pedef u64 tRowcn
4700: 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20  t;    /* 64-bit 
4710: 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65  only if requeste
4720: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
4730: 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65  e */.#else. type
4740: 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b  def u32 tRowcnt;
4750: 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73      /* 32-bit is
4760: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
4770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73  #endif../*.** Es
4780: 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69  timated quantiti
4790: 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72  es used for quer
47a0: 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73  y planning are s
47b0: 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a  tored as 16-bit.
47c0: 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20  ** logarithms.  
47d0: 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20  For quantity X, 
47e0: 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
47f0: 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20   is 10*log2(X). 
4800: 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61   This.** gives a
4810: 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20   possible range 
4820: 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70  of values of app
4830: 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39  roximately 1.0e9
4840: 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a  86 to 1e-986..**
4850: 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64   But the allowed
4860: 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61   values are "gra
4870: 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79  iny".  Not every
4880: 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73   value is repres
4890: 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  entable..** For 
48a0: 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74  example, quantit
48b0: 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72  ies 16 and 17 ar
48c0: 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74  e both represent
48d0: 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a  ed by a LogEst.*
48e0: 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65  * of 40.  Howeve
48f0: 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20  r, since LogEst 
4900: 71 75 61 6e 74 61 74 69 65 73 20 61 72 65 20 73  quantaties are s
4910: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
4920: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
4930: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
4940: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
4950: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
4960: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
4970: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
4980: 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74  arithmic Estimat
4990: 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  e"..**.** Exampl
49a0: 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e  es:.**      1 ->
49b0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
49c0: 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20  20 -> 43        
49d0: 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a    10000 -> 132.*
49e0: 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20  *      2 -> 10  
49f0: 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e             25 ->
4a00: 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35 30   46          250
4a10: 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20  00 -> 146.**    
4a20: 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20    3 -> 16       
4a30: 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20       100 -> 66  
4a40: 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e        1000000 ->
4a50: 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d   199.**      4 -
4a60: 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20 31  > 20           1
4a70: 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20  000 -> 99       
4a80: 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a   1048576 -> 200.
4a90: 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20  **     10 -> 33 
4aa0: 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20 2d            1024 -
4ab0: 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36 37  > 100    4294967
4ac0: 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a  296 -> 320.**.**
4ad0: 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20   The LogEst can 
4ae0: 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69  be negative to i
4af0: 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e  ndicate fraction
4b00: 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20 45  al values. .** E
4b10: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4b20: 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20    0.5 -> -10    
4b30: 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33         0.1 -> -3
4b40: 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35 20  3        0.0625 
4b50: 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65  -> -40.*/.typede
4b60: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67  f INT16_TYPE Log
4b70: 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  Est;../*.** Macr
4b80: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
4b90: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
4ba0: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
4bb0: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
4bc0: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
4bd0: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
4be0: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
4bf0: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
4c00: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
4c10: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
4c20: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
4c30: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
4c40: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
4c50: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
4c60: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
4c70: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
4c80: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
4c90: 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  -DSQLITE_RUNTIME
4ca0: 5f 42 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20  _BYTEORDER=1 is 
4cb0: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
4cc0: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
4cd0: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
4ce0: 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
4cf0: 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
4d00: 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74  .const int sqlit
4d10: 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65  e3one = 1;.#else
4d20: 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e  .extern const in
4d30: 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65  t sqlite3one;.#e
4d40: 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65  ndif.#if (define
4d50: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
4d60: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
4d70: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
4d80: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
4d90: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
4da0: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
4db0: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
4dc0: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
4dd0: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
4de0: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
4df0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
4e00: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
4e10: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
4e20: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
4e30: 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65  __arm__)) && !de
4e40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e  fined(SQLITE_RUN
4e50: 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a  TIME_BYTEORDER).
4e60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4e70: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
4e80: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
4e90: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
4ea0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4eb0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
4ec0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4ed0: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
4ee0: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64  ITE_UTF16LE.#end
4ef0: 69 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28  if.#if (defined(
4f00: 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66  sparc)    || def
4f10: 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20  ined(__ppc__))  
4f20: 5c 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65  \.    && !define
4f30: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
4f40: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
4f50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
4f60: 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20  ORDER    4321.# 
4f70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4f80: 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64  GENDIAN    1.# d
4f90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
4fa0: 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65  TLEENDIAN 0.# de
4fb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
4fc0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
4fd0: 55 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23  UTF16BE.#endif.#
4fe0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
4ff0: 54 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20  TE_BYTEORDER).# 
5000: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
5010: 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20 20  TEORDER    0    
5020: 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b   /* 0 means "unk
5030: 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d  nown at compile-
5040: 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e  time" */.# defin
5050: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
5060: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
5070: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
5080: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
5090: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
50a0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
50b0: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
50c0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
50d0: 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f  NATIVE  (SQLITE_
50e0: 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45  BIGENDIAN?SQLITE
50f0: 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f  _UTF16BE:SQLITE_
5100: 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a  UTF16LE).#endif.
5110: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73  ./*.** Constants
5120: 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74   for the largest
5130: 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f   and smallest po
5140: 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69  ssible 64-bit si
5150: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a  gned integers..*
5160: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61  * These macros a
5170: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77  re designed to w
5180: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
5190: 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
51a0: 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69   64-bit.** compi
51b0: 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lers..*/.#define
51c0: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20   LARGEST_INT64  
51d0: 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69  (0xffffffff|(((i
51e0: 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
51f0: 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41  32)).#define SMA
5200: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69  LLEST_INT64 (((i
5210: 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54  64)-1) - LARGEST
5220: 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20  _INT64)../* .** 
5230: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
5240: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
5250: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
5260: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
5270: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
5280: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
5290: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
52a0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
52b0: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
52c0: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
52d0: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
52e0: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
52f0: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
5300: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
5310: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
5320: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
5330: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
5340: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
5350: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
5360: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
5370: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
5380: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
5390: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
53a0: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
53b0: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
53c0: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
53d0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
53e0: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
53f0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
5400: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
5410: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
5420: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
5430: 65 6d 65 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72  emention might r
5440: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
5450: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
5460: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
5470: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
5480: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
5490: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
54a0: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
54b0: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
54c0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
54d0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
54e0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
54f0: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
5500: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
5510: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
5520: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
5530: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
5540: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
5550: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
5560: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
5570: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
5580: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
5590: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
55a0: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
55b0: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
55c0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
55d0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
55e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
55f0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
5600: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
5610: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
5620: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
5630: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
5640: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
5650: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
5660: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
5670: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
5680: 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f  .h>.# if TARGET_
5690: 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e  OS_IPHONE.#   un
56a0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
56b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66  MAP_SIZE.#   def
56c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
56d0: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64  MAP_SIZE 0.# end
56e0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
56f0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
5700: 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69  P_SIZE.# if defi
5710: 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c  ned(__linux__) \
5720: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57  .  || defined(_W
5730: 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65  IN32) \.  || (de
5740: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
5750: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41   && defined(__MA
5760: 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65  CH__)) \.  || de
5770: 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20  fined(__sun).#  
5780: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5790: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37  AX_MMAP_SIZE 0x7
57a0: 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37  fff0000  /* 2147
57b0: 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65  418112 */.# else
57c0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
57d0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
57e0: 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66   0.# endif.# def
57f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
5800: 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a  MAP_SIZE_xc 1 /*
5810: 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   exclude from ct
5820: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
5830: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75  ./*.** The defau
5840: 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20  lt MMAP_SIZE is 
5850: 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74  zero on all plat
5860: 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e  forms.  Or, even
5870: 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20   if a larger.** 
5880: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
5890: 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  E is specified a
58a0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20  t compile-time, 
58b0: 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69  make sure that i
58c0: 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78  t does.** not ex
58d0: 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d  ceed the maximum
58e0: 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23   mmap size..*/.#
58f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
5900: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a  FAULT_MMAP_SIZE.
5910: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5920: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
5930: 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 0.# define SQL
5940: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5950: 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45  _SIZE_xc 1  /* E
5960: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5970: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  e.c */.#endif.#i
5980: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5990: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54  _MMAP_SIZE>SQLIT
59a0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
59b0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  # undef SQLITE_D
59c0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
59d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
59e0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
59f0: 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE SQLITE_MAX_MM
5a00: 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a  AP_SIZE.#endif..
5a10: 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f  /*.** Only one o
5a20: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5a30: 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f  STAT3 or SQLITE_
5a40: 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e  ENABLE_STAT4 can
5a50: 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20   be defined..** 
5a60: 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65  Priority is give
5a70: 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42  n to SQLITE_ENAB
5a80: 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69  LE_STAT4.  If ei
5a90: 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64  ther are defined
5aa0: 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65  , also.** define
5ab0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5ac0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f  TAT3_OR_STAT4.*/
5ad0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
5ae0: 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e  NABLE_STAT4.# un
5af0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5b00: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
5b10: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5b20: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
5b30: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
5b40: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
5b50: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
5b60: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
5b70: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
5b80: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5b90: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
5ba0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5bb0: 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66  _OR_STAT4.#endif
5bc0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
5bd0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
5be0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
5bf0: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
5c00: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
5c10: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
5c20: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
5c30: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
5c40: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
5c50: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
5c60: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
5c70: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
5c80: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
5c90: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
5ca0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
5cb0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
5cc0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
5cd0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
5ce0: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
5cf0: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
5d00: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
5d10: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
5d20: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
5d30: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
5d40: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
5d50: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
5d60: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
5d70: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
5d80: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
5d90: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
5da0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
5db0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
5dc0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5de0: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
5df0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
5e00: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
5e10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
5e20: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
5e30: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
5e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
5e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
5e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
5e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
5e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
5ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
5eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
5ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
5ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
5ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
5ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
5f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
5f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
5f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
5f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
5f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
5f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
5f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
5f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
5f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
5f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
5fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
5fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
5fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
5fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
5fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
5ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
6000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
6010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
6020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
6030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
6040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
6050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
6060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
6070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
6080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
6090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
60a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
60b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
60c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
60d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
60e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
60f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
6100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
6110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
6120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
6130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
6140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
6150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
6160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
6170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
6180: 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72   the .** one par
6190: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
61a0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
61b0: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
61c0: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20  ve to introduce 
61d0: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
61e0: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
61f0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
6200: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
6210: 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72   Any .** pointer
6220: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
6230: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
6240: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
6250: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
6260: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
6270: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
6280: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
6290: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
62a0: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
62b0: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
62c0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
62d0: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
62e0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
62f0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
6300: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
6310: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
6320: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
6330: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
6340: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
6350: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
6360: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
6370: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
6380: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
6390: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
63a0: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
63b0: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
63c0: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
63d0: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
63e0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
63f0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
6400: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
6410: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
6420: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
6430: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
6440: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
6450: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
6460: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
6470: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
6480: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
6490: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
64a0: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
64b0: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
64c0: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
64d0: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
64e0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
64f0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
6500: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
6510: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
6520: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
6530: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
6540: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
6550: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
6560: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
6570: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
6580: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
6590: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
65a0: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
65b0: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
65c0: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
65d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
65e0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
65f0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
6600: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
6610: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
6620: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
6630: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
6640: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
6650: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
6660: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
6670: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
6680: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
6690: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
66a0: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
66b0: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
66c0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
66d0: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
66e0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
66f0: 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64  SQLITE_WSD .  #d
6700: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
6710: 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) v.  #define sq
6720: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
6730: 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a  g sqlite3Config.
6740: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
6750: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
6760: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  os are used to s
6770: 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72  uppress compiler
6780: 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f   warnings and to
6790: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61  .** make it clea
67a0: 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65  r to human reade
67b0: 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69  rs when a functi
67c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
67d0: 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a  deliberately .**
67e0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
67f0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
6800: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
6810: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
6820: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
6830: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
6840: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
6850: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
6860: 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  e the .** implem
6870: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
6880: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
6890: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
68a0: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
68b0: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
68c0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
68d0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
68e0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
68f0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
6900: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
6910: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
6920: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
6930: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
6940: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
6950: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
6960: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
6970: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
6980: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
6990: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
69a0: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
69b0: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
69c0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
69d0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
69e0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
69f0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
6a00: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
6a10: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
6a20: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
6a30: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
6a40: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
6a50: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
6a60: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
6a70: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
6a80: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
6a90: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
6aa0: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
6ab0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
6ac0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
6ad0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
6ae0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
6af0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6b00: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
6b10: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
6b20: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
6b30: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
6b40: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
6b50: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
6b60: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
6b70: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
6b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
6b90: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
6ba0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
6bb0: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
6bc0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
6bd0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
6be0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
6bf0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
6c00: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
6c10: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
6c20: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
6c30: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
6c40: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
6c50: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
6c60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6c70: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
6c80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
6c90: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
6ca0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
6cb0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
6cc0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
6cd0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
6ce0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
6cf0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
6d00: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
6d10: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
6d20: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
6d30: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
6d40: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
6d50: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
6d60: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
6d70: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
6d80: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
6d90: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
6da0: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
6db0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
6dc0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
6dd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
6de0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
6df0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6e00: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
6e10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6e20: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
6e30: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
6e40: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
6e50: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
6e60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6e70: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
6e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
6e90: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
6ea0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
6eb0: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
6ec0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
6ed0: 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
6ee0: 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ts PrintfArgumen
6ef0: 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ts;.typedef stru
6f00: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
6f10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6f20: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
6f30: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
6f40: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
6f50: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
6f60: 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20  ct SQLiteThread 
6f70: 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79  SQLiteThread;.ty
6f80: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
6f90: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
6fa0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
6fb0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
6fc0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
6fd0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
6fe0: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
6ff0: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
7000: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7010: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
7020: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
7030: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
7040: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7050: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
7060: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7070: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
7080: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
7090: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
70a0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
70b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
70c0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
70d0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
70e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
70f0: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
7100: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
7110: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
7120: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
7130: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
7140: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e  f struct WhereIn
7150: 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79  fo WhereInfo;.ty
7160: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74  pedef struct Wit
7170: 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44  h With;../*.** D
7180: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
7190: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
71a0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
71b0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
71c0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
71d0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
71e0: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
71f0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
7200: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
7210: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
7220: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
7230: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
7240: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
7250: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
7260: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
7270: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
7280: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
7290: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
72a0: 0a 0a 2f 2a 20 57 68 65 6e 20 75 73 69 6e 67 20  ../* When using 
72b0: 61 20 64 65 66 61 75 6c 74 20 77 61 6c 20 73 61  a default wal sa
72c0: 66 65 74 79 20 6c 65 76 65 6c 2c 20 74 68 65 20  fety level, the 
72d0: 73 61 66 65 74 79 20 6c 65 76 65 6c 20 73 68 6f  safety level sho
72e0: 75 6c 64 20 6f 6e 6c 79 20 0a 2a 2a 20 63 68 61  uld only .** cha
72f0: 6e 67 65 20 77 69 74 68 20 74 68 65 20 6a 6f 75  nge with the jou
7300: 72 6e 61 6c 20 6d 6f 64 65 20 69 66 20 74 68 65  rnal mode if the
7310: 20 75 73 65 72 20 68 61 73 6e 27 74 20 6d 61 6e   user hasn't man
7320: 75 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20  ually specified 
7330: 0a 2a 2a 20 70 72 61 67 6d 61 20 73 79 6e 63 68  .** pragma synch
7340: 72 6f 6e 6f 75 73 2c 20 69 66 20 74 68 65 79 20  ronous, if they 
7350: 68 61 76 65 20 74 68 65 20 64 65 66 61 75 6c 74  have the default
7360: 73 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20 61  s shouldn't be a
7370: 70 70 6c 69 65 64 2e 0a 2a 2a 20 54 68 65 20 53  pplied..** The S
7380: 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45  QLITE_SAFETYLEVE
7390: 4c 5f 46 49 58 45 44 20 76 61 6c 75 65 20 69 73  L_FIXED value is
73a0: 20 4f 52 65 64 20 69 6e 74 6f 20 74 68 65 20 44   ORed into the D
73b0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a  b->safety_level.
73c0: 2a 2a 20 66 69 65 6c 64 20 77 68 65 6e 20 74 68  ** field when th
73d0: 65 20 75 73 65 72 20 68 61 73 20 73 70 65 63 69  e user has speci
73e0: 66 69 65 64 20 61 20 73 79 6e 63 68 72 6f 6e 6f  fied a synchrono
73f0: 75 73 20 73 65 74 74 69 6e 67 20 76 69 61 20 70  us setting via p
7400: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ragma..*/.#defin
7410: 65 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c  e SQLITE_SAFETYL
7420: 45 56 45 4c 5f 46 49 58 45 44 20 30 78 31 30 0a  EVEL_FIXED 0x10.
7430: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
7440: 41 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45  AFETYLEVEL_VALUE
7450: 5f 4d 41 53 4b 20 30 78 30 33 0a 23 64 65 66 69  _MASK 0x03.#defi
7460: 6e 65 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65  ne SQLITE_DbSafe
7470: 74 79 4c 65 76 65 6c 56 61 6c 75 65 28 6c 65 76  tyLevelValue(lev
7480: 65 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54  el) (level&SQLIT
7490: 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 56 41  E_SAFETYLEVEL_VA
74a0: 4c 55 45 5f 4d 41 53 4b 29 0a 23 64 65 66 69 6e  LUE_MASK).#defin
74b0: 65 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74  e SQLITE_DbSafet
74c0: 79 4c 65 76 65 6c 49 73 46 69 78 65 64 28 6c 65  yLevelIsFixed(le
74d0: 76 65 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49  vel) (level&SQLI
74e0: 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46  TE_SAFETYLEVEL_F
74f0: 49 58 45 44 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  IXED)../*.** Eac
7500: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
7510: 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62  to be accessed b
7520: 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20  y the system is 
7530: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
7540: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7550: 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72  structure.  Ther
7560: 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74  e are normally t
7570: 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  wo of these stru
7580: 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65  ctures.** in the
7590: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72   sqlite.aDb[] ar
75a0: 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20  ray.  aDb[0] is 
75b0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
75c0: 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44  e file and.** aD
75d0: 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61  b[1] is the data
75e0: 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
75f0: 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79  o hold temporary
7600: 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69   tables.  Additi
7610: 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  onal.** database
7620: 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  s may be attache
7630: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20  d..*/.struct Db 
7640: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
7650: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
7660: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
7670: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
7680: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
7690: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
76a0: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
76b0: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
76c0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
76d0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
76e0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
76f0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
7700: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
7710: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
7720: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
7730: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
7740: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
7750: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7760: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7770: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
7780: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
7790: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
77a0: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
77b0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
77c0: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
77d0: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
77e0: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
77f0: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
7800: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
7810: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
7820: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
7830: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
7840: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
7850: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
7860: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
7870: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
7880: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
7890: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
78a0: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
78b0: 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d  ct..** .** Schem
78c0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
78d0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
78e0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
78f0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
7900: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
7910: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
7920: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
7930: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
7940: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
7950: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
7960: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
7970: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
7980: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
7990: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
79a0: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
79b0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
79c0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
79d0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
79e0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
79f0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
7a00: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
7a10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
7a20: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
7a30: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
7a40: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
7a50: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
7a60: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
7a70: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
7a80: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
7a90: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
7aa0: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
7ab0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
7ac0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
7ad0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
7ae0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
7af0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
7b00: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
7b10: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
7b20: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
7b30: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
7b40: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
7b50: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
7b60: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
7b70: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
7b80: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
7b90: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
7ba0: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
7bb0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
7bc0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7bd0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
7be0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
7bf0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
7c00: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
7c10: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
7c20: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
7c30: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
7c40: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
7c50: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
7c60: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
7c70: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
7c80: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
7c90: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
7ca0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
7cb0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
7cc0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
7cd0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
7ce0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
7cf0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
7d00: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
7d10: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
7d20: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
7d30: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
7d40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
7d50: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
7d60: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
7d70: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
7d80: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
7d90: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
7da0: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
7db0: 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d   .** Db.pSchema-
7dc0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
7dd0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
7de0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
7df0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
7e00: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
7e10: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
7e20: 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79  #define DbHasAny
7e30: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
7e40: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
7e50: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7e60: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
7e70: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
7e80: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
7e90: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
7ea0: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d  a->schemaFlags|=
7eb0: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
7ec0: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
7ed0: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
7ee0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
7ef0: 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  Flags&=~(P)../*.
7f00: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
7f10: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
7f20: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
7f30: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
7f40: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
7f50: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
7f60: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
7f70: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
7f80: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
7f90: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
7fa0: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
7fb0: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
7fc0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
7fd0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
7fe0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
7ff0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
8000: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
8010: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
8020: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
8030: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
8040: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
8050: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
8060: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
8070: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
8080: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
8090: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
80a0: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
80b0: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
80c0: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
80d0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
80e0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
80f0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
8100: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
8110: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
8120: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
8130: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
8140: 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  s) */../*.** The
8150: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
8160: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
8170: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
8180: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
8190: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
81a0: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
81b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
81c0: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
81d0: 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
81e0: 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a  THREADS+1)../*.*
81f0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
8200: 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66  oc is a set of f
8210: 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72  ixed-size buffer
8220: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  s that can be us
8230: 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79  ed.** to satisfy
8240: 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74   small transient
8250: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
8260: 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20  on requests for 
8270: 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63  objects.** assoc
8280: 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72  iated with a par
8290: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
82a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
82b0: 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b  e use of.** look
82c0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f  aside malloc pro
82d0: 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63  vides a signific
82e0: 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ant performance 
82f0: 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28  enhancement.** (
8300: 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61  approx 10%) by a
8310: 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73  voiding numerous
8320: 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71   malloc/free req
8330: 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73  uests while pars
8340: 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ing.** SQL state
8350: 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ments..**.** The
8360: 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63   Lookaside struc
8370: 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69  ture holds confi
8380: 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  guration informa
8390: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a  tion about the.*
83a0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
83b0: 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45  oc subsystem.  E
83c0: 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65  ach available me
83d0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
83e0: 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73  in.** the lookas
83f0: 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73  ide subsystem is
8400: 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e   stored on a lin
8410: 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b  ked list of Look
8420: 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a  asideSlot.** obj
8430: 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b  ects..**.** Look
8440: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
8450: 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77  s are only allow
8460: 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74  ed for objects t
8470: 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74  hat are associat
8480: 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72  ed.** with a par
8490: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
84a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65   connection.  He
84b0: 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f  nce, schema info
84c0: 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a  rmation cannot.*
84d0: 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c  * be stored in l
84e0: 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65  ookaside because
84f0: 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   in shared cache
8500: 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61   mode the schema
8510: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
8520: 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  is shared by mul
8530: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63  tiple database c
8540: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65  onnections.  The
8550: 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61  refore, while pa
8560: 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20  rsing.** schema 
8570: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
8580: 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62   Lookaside.bEnab
8590: 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61  led flag is clea
85a0: 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c  red so that.** l
85b0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
85c0: 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65  ions are not use
85d0: 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74  d to construct t
85e0: 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  he schema object
85f0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f  s..*/.struct Loo
8600: 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73  kaside {.  u16 s
8610: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  z;              
8620: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
8630: 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74  ch buffer in byt
8640: 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62  es */.  u8 bEnab
8650: 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  led;            
8660: 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61  /* False to disa
8670: 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64  ble new lookasid
8680: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
8690: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
86a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
86b0: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
86c0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
86d0: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
86e0: 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20   int nOut;      
86f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8700: 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75  er of buffers cu
8710: 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
8720: 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f  out */.  int mxO
8730: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
8740: 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61   /* Highwater ma
8750: 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20  rk for nOut */. 
8760: 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20   int anStat[3]; 
8770: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68           /* 0: h
8780: 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69  its.  1: size mi
8790: 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d  sses.  2: full m
87a0: 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61  isses */.  Looka
87b0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
87c0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
87d0: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
87e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
87f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
8800: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
8810: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
8820: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
8830: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
8840: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
8850: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
8860: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
8870: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
8880: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
8890: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
88a0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
88b0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
88c0: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
88d0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
88e0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
88f0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
8900: 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  s..**.** Hash ea
8910: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
8920: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
8930: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
8940: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
8950: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
8960: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61   the FuncDef.pHa
8970: 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72  sh chain..*/.str
8980: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8990: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32  {.  FuncDef *a[2
89a0: 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73  3];       /* Has
89b0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
89c0: 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
89d0: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
89e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
89f0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
8a00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
8a10: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
8a20: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
8a30: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
8a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
8a50: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
8a60: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
8a70: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
8a80: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
8a90: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
8aa0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
8ab0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
8ac0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
8ad0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
8ae0: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
8af0: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
8b00: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
8b10: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
8b20: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
8b30: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
8b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
8b50: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
8b60: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8b80: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
8b90: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
8ba0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
8bb0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
8bc0: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
8bd0: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
8be0: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
8bf0: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
8c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
8c10: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
8c20: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
8c30: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
8c40: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
8c50: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
8c60: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
8c70: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
8c80: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
8c90: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
8ca0: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
8cb0: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
8cc0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
8cd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8ce0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
8cf0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
8d00: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
8d10: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
8d20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
8d30: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
8d40: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
8d50: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
8d60: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
8d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
8d80: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
8d90: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
8da0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ons */.  u8 auto
8db0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
8dc0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
8dd0: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
8de0: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
8df0: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
8e00: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
8e10: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
8e20: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
8e30: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
8e40: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
8e50: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
8e60: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
8e70: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
8e80: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
8e90: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
8ea0: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
8eb0: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
8ec0: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
8ed0: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
8ee0: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
8ef0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
8f00: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
8f10: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
8f20: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
8f30: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
8f40: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
8f50: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
8f60: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
8f70: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
8f80: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
8f90: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
8fa0: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
8fb0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
8fc0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
8fd0: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
8fe0: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
8ff0: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
9000: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
9010: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
9020: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
9030: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
9060: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
9070: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
9080: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
90a0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
90b0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
90c0: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
90d0: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
90e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
90f0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
9100: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
9110: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
9120: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
9130: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
9140: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
9150: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
9160: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
9170: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
9180: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
9190: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
91a0: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
91b0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
91c0: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
91d0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
91e0: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
91f0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
9200: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
9210: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
9220: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
9230: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
9240: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
9250: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
9260: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
9270: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
9280: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9290: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
92a0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
92b0: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
92c0: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
92d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
92e0: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
92f0: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
9300: 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  gger */.  } init
9310: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
9320: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
9330: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
9340: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
9350: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
9360: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
9370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9380: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
9390: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
93a0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
93b0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
93c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
93d0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
93e0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
93f0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
9400: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
9410: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9420: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
9430: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
9440: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  () */.  int nExt
9450: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
9460: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9470: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
9480: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
9490: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
94a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
94b0: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
94c0: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
94d0: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
94e0: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
94f0: 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61  );        /* Tra
9500: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
9510: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
9520: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9540: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
9550: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
9560: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
9570: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
9580: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
9590: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
95a0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
95b0: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
95e0: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
95f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
9600: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
9610: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
9620: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
9630: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
9640: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
9650: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
9660: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
9670: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
9680: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
9690: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
96a0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
96b0: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
96c0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
96d0: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
96e0: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
96f0: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
9700: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
9710: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
9720: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
9730: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
9740: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
9750: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9760: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
9770: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
9780: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
9790: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
97a0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
97b0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
97c0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
97d0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
97e0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
97f0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
9800: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
9810: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
9820: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
9830: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
9840: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
9850: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
9860: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
9870: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
9880: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
9890: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
98a0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
98b0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
98c0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
98d0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
98e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
98f0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
9900: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
9910: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
9920: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
9930: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
9940: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
9950: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
9960: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
9970: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
9980: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
9990: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
99a0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
99b0: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
99c0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
99d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
99e0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
99f0: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a10: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
9a20: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
9a30: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9a40: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
9a60: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
9a70: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
9a80: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
9a90: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
9aa0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
9ab0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
9ac0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
9ad0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
9ae0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
9af0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
9b00: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
9b10: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9b20: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
9b30: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e  callback */.  un
9b40: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
9b50: 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Ops;        /* N
9b60: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
9b70: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
9b80: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
9b90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9ba0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
9bb0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bd0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
9be0: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
9bf0: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
9c00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9c10: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
9c20: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
9c30: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
9c40: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
9c50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9c60: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
9c70: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
9c80: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
9c90: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
9ca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
9cb0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
9cc0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
9cd0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
9ce0: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
9cf0: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
9d00: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
9d10: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
9d20: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
9d30: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
9d40: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
9d50: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
9d60: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
9d70: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
9d80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9d90: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
9da0: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
9db0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
9dc0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
9dd0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
9de0: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
9df0: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
9e00: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
9e10: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
9e20: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
9e30: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
9e40: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
9e50: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
9e60: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
9e70: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
9e80: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
9e90: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
9ea0: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
9eb0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
9ec0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
9ed0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9ee0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
9ef0: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
9f00: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
9f10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
9f30: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
9f40: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
9f50: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
9f60: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
9f70: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
9f80: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
9f90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
9fa0: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
9fb0: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
9fc0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
9fd0: 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72  immediate constr
9fe0: 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a  aints */.  int *
9ff0: 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20  pnBytesFreed;   
a000: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
a010: 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65  ot NULL, increme
a020: 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65  nt this in DbFre
a030: 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53  e() */..#ifdef S
a040: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
a050: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20  OCK_NOTIFY.  /* 
a060: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
a070: 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20  riables are all 
a080: 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65  protected by the
a090: 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a   STATIC_MASTER .
a0a0: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
a0b0: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
a0c0: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
a0d0: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
a0e0: 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  y.c. .  **.  ** 
a0f0: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
a100: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
a110: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
a120: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
a130: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
a140: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
a150: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
a160: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
a170: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
a180: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
a190: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
a1a0: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
a1b0: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
a1c0: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
a1d0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
a1e0: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
a1f0: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
a200: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
a210: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
a220: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
a230: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
a240: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
a250: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
a260: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
a270: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
a280: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
a290: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
a2a0: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
a2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a2c0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a2d0: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
a2e0: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
a2f0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
a300: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
a310: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
a320: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
a330: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
a340: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
a350: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
a360: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
a370: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
a380: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
a390: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
a3a0: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
a3b0: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
a3c0: 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28 28 64  fine ENC(db) ((d
a3d0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
a3e0: 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  ma->enc)../*.** 
a3f0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
a400: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
a410: 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  flags..*/.#defin
a420: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
a430: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
a440: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
a450: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
a460: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a470: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
a480: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
a490: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
a4a0: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
a4b0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
a4c0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
a4d0: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20      0x00000004  
a4e0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
a4f0: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
a500: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a510: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
a520: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
a530: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
a540: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
a550: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a560: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
a570: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f  0x00000010  /* O
a580: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
a590: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
a5a0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
a5b0: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
a5c0: 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  20  /* Show full
a5d0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
a5e0: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
a5f0: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
a600: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
a610: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
a620: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
a630: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a640: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
a650: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
a660: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
a670: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
a680: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
a6b0: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
a6c0: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
a6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
a700: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
a710: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
a720: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
a730: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
a740: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
a750: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
a760: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a790: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
a7a0: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
a7b0: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
a7c0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
a7d0: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
a7e0: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
a7f0: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
a800: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a810: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
a820: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
a830: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
a840: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
a850: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a860: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
a870: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
a880: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
a890: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
a8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
a8b0: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
a8c0: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
a8d0: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
a8e0: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
a8f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
a900: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
a910: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
a920: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
a930: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
a940: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
a950: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
a960: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
a970: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
a980: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
a990: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
a9a0: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
a9b0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
a9c0: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
a9d0: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
a9e0: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
a9f0: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
aa00: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
aa10: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
aa20: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
aa30: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
aa40: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
aa50: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
aa60: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
aa70: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
aa80: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
aa90: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
aaa0: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
aab0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
aac0: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
aad0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
aae0: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
aaf0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
ab00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ab10: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
ab20: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
ab30: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
ab40: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
ab50: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
ab60: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
ab70: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
ab80: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
ab90: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
aba0: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
abb0: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
abc0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
abd0: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
abe0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
abf0: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30  eTrigger  0x0080
ac00: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
ac10: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
ac20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ac30: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
ac40: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
ac50: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
ac60: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
ac70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
ac80: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30  yOnly      0x020
ac90: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
aca0: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
acb0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
acc0: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
acd0: 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20      0x04000000  
ace0: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
acf0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a   QUERY PLAN */..
ad00: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
ad10: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
ad20: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
ad30: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
ad40: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
ad50: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
ad60: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
ad70: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
ad80: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
ad90: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
ada0: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
adb0: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
adc0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
add0: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
ade0: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
adf0: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
ae00: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
ae10: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
ae20: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
ae30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ae40: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
ae50: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
ae60: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
ae70: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
ae80: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
ae90: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
aea0: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
aeb0: 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20  ring */./*      
aec0: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73            not us
aed0: 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f  ed    0x0010   /
aee0: 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64  / Was: SQLITE_Id
aef0: 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64  xRealAsInt */.#d
af00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
af10: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
af20: 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  20   /* DISTINCT
af30: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
af40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
af50: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
af60: 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65  0x0040   /* Cove
af70: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
af80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
af90: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
afa0: 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52  n 0x0080   /* OR
afb0: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
afc0: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
afd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71  fine SQLITE_Subq
afe0: 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30  Coroutine  0x010
aff0: 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20  0   /* Evaluate 
b000: 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f  subqueries as co
b010: 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66  routines */.#def
b020: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
b030: 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30  itive     0x0200
b040: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
b050: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b060: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
b070: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
b080: 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0400   /* Omit u
b090: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
b0a0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
b0b0: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 20 20 20   SQLITE_Stat3   
b0c0: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
b0d0: 2f 2a 20 55 73 65 20 74 68 65 20 53 51 4c 49 54  /* Use the SQLIT
b0e0: 45 5f 53 54 41 54 33 20 74 61 62 6c 65 20 2a 2f  E_STAT3 table */
b0f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b100: 41 64 6a 75 73 74 4f 75 74 45 73 74 20 20 20 30  AdjustOutEst   0
b110: 78 31 30 30 30 20 20 20 2f 2a 20 41 64 6a 75 73  x1000   /* Adjus
b120: 74 20 6f 75 74 70 75 74 20 65 73 74 69 6d 61 74  t output estimat
b130: 65 73 20 75 73 69 6e 67 20 57 48 45 52 45 20 2a  es using WHERE *
b140: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b150: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
b160: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
b170: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
b180: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
b190: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
b1a0: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
b1b0: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
b1c0: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
b1d0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
b1e0: 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
b1f0: 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74  TEST.#define Opt
b200: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
b210: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28  d(db, mask)  (((
b220: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
b230: 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66  (mask))!=0).#def
b240: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
b250: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
b260: 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  )   (((db)->dbOp
b270: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d  tFlags&(mask))==
b280: 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  0).#else.#define
b290: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
b2a0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
b2b0: 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d   0.#define Optim
b2c0: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
b2d0: 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e  b, mask)   1.#en
b2e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
b2f0: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
b300: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
b310: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
b320: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
b330: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
b340: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
b350: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
b360: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
b370: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
b380: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
b390: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
b3a0: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
b3b0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
b3c0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
b3d0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
b3e0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
b3f0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
b400: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
b410: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
b420: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
b430: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
b440: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
b450: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
b460: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
b470: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
b480: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
b490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b4a0: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
b4b0: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
b4c0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
b4d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b4e0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
b4f0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
b500: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
b510: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
b520: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
b530: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
b540: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
b550: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
b560: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
b570: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
b580: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
b590: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
b5a0: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
b5b0: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
b5c0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
b5d0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
b5e0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
b5f0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
b600: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
b610: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
b620: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
b630: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
b640: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
b650: 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e  ructure.  A poin
b660: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
b670: 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64 20  cture is stored 
b680: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46  in the sqlite.aF
b690: 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  unc.** hash tabl
b6a0: 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c  e.  When multipl
b6b0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  e functions have
b6c0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20   the same name, 
b6d0: 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a  the hash table.*
b6e0: 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69  * points to a li
b6f0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65  nked list of the
b700: 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  se structures..*
b710: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
b720: 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20   {.  i16 nArg;  
b730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b740: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
b750: 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69  .  -1 means unli
b760: 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66  mited */.  u16 f
b770: 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20  uncFlags;       
b780: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
b790: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
b7a0: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
b7b0: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
b7c0: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
b7d0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
b7e0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
b7f0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
b800: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
b810: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
b820: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
b830: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
b840: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
b850: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
b860: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
b870: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
b880: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
b890: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
b8a0: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
b8b0: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
b8c0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
b8d0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
b8e0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
b8f0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
b900: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
b910: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
b920: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
b930: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
b940: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
b950: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
b960: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
b970: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
b980: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
b990: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
b9a0: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
b9b0: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
b9c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
b9d0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
b9e0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
b9f0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
ba00: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
ba10: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
ba20: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
ba30: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
ba40: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
ba50: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
ba60: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
ba70: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
ba80: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
ba90: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
baa0: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
bab0: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
bac0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
bad0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
bae0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
baf0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
bb00: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
bb10: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
bb20: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
bb30: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
bb40: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
bb50: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
bb60: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
bb70: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
bb80: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
bb90: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
bba0: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
bbb0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
bbc0: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
bbd0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
bbe0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
bbf0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
bc00: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
bc10: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
bc20: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
bc30: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
bc40: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
bc50: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
bc60: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
bc70: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
bc80: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
bc90: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
bca0: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
bcb0: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
bcc0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
bcd0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
bce0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
bcf0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
bd00: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
bd10: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
bd20: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
bd30: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
bd40: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
bd50: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
bd60: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
bd70: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
bd80: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
bd90: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
bda0: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
bdb0: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
bdc0: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
bdd0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
bde0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
bdf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
be00: 53 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c  SK  0x003 /* SQL
be10: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
be20: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
be30: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
be40: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
be50: 20 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e      0x004 /* Can
be60: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
be70: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
be80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
be90: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
bea0: 20 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73   0x008 /* Case-s
beb0: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
bec0: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
bed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
bee0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31  NC_EPHEM    0x01
bef0: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
bf00: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
bf10: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
bf20: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
bf30: 4c 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74  L 0x020 /* sqlit
bf40: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
bf50: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
bf60: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
bf70: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
bf80: 20 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c     0x040 /* Buil
bf90: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
bfa0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
bfb0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
bfc0: 50 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20  PEOF   0x080 /* 
bfd0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
bfe0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
bff0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c000: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30  C_COUNT    0x100
c010: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
c020: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
c030: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c040: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
c050: 30 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x200 /* Built-i
c060: 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20  n coalesce() or 
c070: 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66  ifnull() */.#def
c080: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c090: 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f  UNLIKELY 0x400 /
c0a0: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
c0b0: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
c0c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c0d0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
c0e0: 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  x800 /* Constant
c0f0: 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63   inputs give a c
c100: 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a  onstant output *
c110: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
c120: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
c130: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
c140: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
c150: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
c160: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
c170: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
c180: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
c190: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
c1a0: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
c1b0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
c1c0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
c1d0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
c1e0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
c1f0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
c200: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
c210: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
c220: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
c230: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
c240: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
c250: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
c260: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
c270: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
c280: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
c290: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
c2a0: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
c2b0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
c2c0: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
c2d0: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
c2e0: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
c2f0: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
c300: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
c310: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
c320: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
c330: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
c340: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
c350: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
c360: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
c370: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
c380: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
c390: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
c3a0: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ag..**.**   AGGR
c3b0: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
c3c0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
c3d0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
c3e0: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
c3f0: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
c400: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
c410: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
c420: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
c430: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
c440: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
c450: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
c460: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
c470: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
c480: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
c490: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
c4a0: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
c4b0: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
c4c0: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
c4d0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
c4e0: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
c4f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
c500: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
c510: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
c520: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
c530: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
c540: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
c550: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
c560: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
c570: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
c580: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
c590: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
c5a0: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
c5b0: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
c5c0: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
c5d0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
c5e0: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
c5f0: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
c600: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
c610: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
c620: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
c630: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
c640: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
c650: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
c660: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
c670: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
c680: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
c690: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
c6a0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
c6b0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
c6c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
c6d0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
c6e0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
c6f0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
c700: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
c710: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
c720: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
c730: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
c740: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
c750: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
c760: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
c770: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
c780: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
c790: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
c7a0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
c7b0: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
c7c0: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
c7d0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
c7e0: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
c7f0: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
c800: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
c810: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
c820: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
c830: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
c840: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
c850: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
c860: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
c870: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
c880: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
c890: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
c8a0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
c8b0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
c8c0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
c8d0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
c8e0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
c8f0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
c900: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
c910: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
c920: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
c930: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
c940: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
c950: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
c960: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
c970: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
c980: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
c990: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
c9a0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
c9b0: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
c9c0: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
c9d0: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
c9e0: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
c9f0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
ca00: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
ca10: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
ca20: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
ca30: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
ca40: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
ca50: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
ca60: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
ca70: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
ca80: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
ca90: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
caa0: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
cab0: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
cac0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
cad0: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
cae0: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
caf0: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
cb00: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
cb10: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
cb20: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
cb30: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
cb40: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
cb50: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
cb60: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb80: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
cb90: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
cba0: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
cbb0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cbd0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
cbe0: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
cbf0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
cc00: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
cc10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
cc20: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
cc30: 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
cc40: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc60: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
cc70: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
cc80: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
cc90: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
cca0: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
ccb0: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
ccc0: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
ccd0: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
cce0: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
ccf0: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
cd00: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
cd10: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
cd20: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
cd30: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
cd40: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
cd50: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
cd60: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
cd70: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
cd80: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
cd90: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
cda0: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
cdb0: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
cdc0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
cdd0: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
cde0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
cdf0: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
ce00: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
ce10: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
ce20: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
ce30: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
ce40: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
ce50: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
ce60: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce80: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
ce90: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
cea0: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
ceb0: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ced0: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
cee0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
cef0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
cf00: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
cf10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
cf20: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
cf30: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
cf40: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
cf50: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
cf60: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
cf70: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
cf80: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
cf90: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
cfa0: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
cfb0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
cfc0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
cfd0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
cfe0: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
cff0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
d000: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
d010: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
d020: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
d030: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
d040: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
d050: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
d060: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
d070: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
d080: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
d090: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
d0a0: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
d0b0: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
d0c0: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
d0d0: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
d0e0: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
d0f0: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
d100: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
d110: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
d120: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
d130: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
d140: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
d150: 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
d160: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
d170: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
d180: 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75  .  INT==1 */.  u
d190: 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
d1a0: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
d1b0: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
d1c0: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
d1d0: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
d1e0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
d1f0: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
d200: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
d210: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
d220: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
d230: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
d240: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
d250: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
d260: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
d270: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
d280: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
d290: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
d2a0: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
d2b0: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
d2c0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
d2d0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
d2e0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
d2f0: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
d300: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
d310: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
d320: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
d330: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
d340: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
d350: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
d360: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
d370: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
d380: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
d390: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
d3a0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
d3b0: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
d3c0: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
d3d0: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
d3e0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
d3f0: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
d400: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
d410: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
d420: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
d430: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
d440: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
d450: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d460: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
d470: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
d480: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
d490: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
d4a0: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
d4b0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
d4c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
d4d0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
d4e0: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
d4f0: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
d500: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
d510: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
d520: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
d530: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
d540: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
d550: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
d560: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
d570: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
d580: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
d590: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
d5a0: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
d5b0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
d5c0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
d5d0: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
d5e0: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
d5f0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
d600: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
d610: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
d620: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
d630: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
d640: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
d650: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
d660: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
d670: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
d680: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
d690: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
d6a0: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
d6b0: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
d6c0: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
d6d0: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
d6e0: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
d6f0: 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74    .**.** But rat
d700: 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
d710: 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
d720: 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20  egin with 'a'.  
d730: 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
d740: 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
d750: 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
d760: 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
d770: 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
d780: 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
d790: 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
d7a0: 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
d7b0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
d7c0: 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
d7d0: 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
d7e0: 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
d7f0: 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
d800: 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
d810: 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
d820: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f  e comparison..*/
d830: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d840: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27  AFF_TEXT     'a'
d850: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d860: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27  AFF_NONE     'b'
d870: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d880: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27  AFF_NUMERIC  'c'
d890: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d8a0: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27  AFF_INTEGER  'd'
d8b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d8c0: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27  AFF_REAL     'e'
d8d0: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
d8e0: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
d8f0: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
d900: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
d910: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
d920: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
d930: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
d940: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
d950: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
d960: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
d970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
d980: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a  F_MASK     0x67.
d990: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
d9a0: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
d9b0: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
d9c0: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
d9d0: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
d9e0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
d9f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
da00: 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
da10: 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
da20: 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
da30: 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
da40: 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
da50: 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
da60: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
da70: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
da80: 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
da90: 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
daa0: 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
dab0: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
dac0: 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
dad0: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
dae0: 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
daf0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
db00: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
db10: 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20   0x08  /* jumps 
db20: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
db30: 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
db40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
db50: 45 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f  EP2      0x10  /
db60: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
db70: 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
db80: 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
dba0: 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
dbb0: 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
dbc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
dbd0: 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 38 38  OTNULL      0x88
dbe0: 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
dbf0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
dc00: 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
dc10: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
dc20: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
dc30: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
dc40: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
dc50: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
dc60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
dc70: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
dc80: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
dc90: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
dca0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
dcb0: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
dcc0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
dcd0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
dce0: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
dcf0: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
dd00: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
dd10: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
dd20: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
dd30: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
dd40: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
dd50: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
dd60: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
dd70: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
dd80: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
dd90: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
dda0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
ddb0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
ddc0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
ddd0: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
dde0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
ddf0: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
de00: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
de10: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
de20: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
de30: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
de40: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
de50: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
de60: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
de70: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
de80: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
de90: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
dea0: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
deb0: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
dec0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
ded0: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
dee0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
def0: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
df00: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
df10: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
df20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
df30: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
df40: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
df50: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
df60: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
df70: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
df80: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
df90: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
dfa0: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
dfb0: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
dfc0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
dfd0: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
dfe0: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
dff0: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
e000: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
e010: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
e020: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
e030: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
e040: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
e050: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
e060: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
e070: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
e080: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
e090: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
e0a0: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
e0b0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
e0c0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
e0d0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
e0e0: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
e0f0: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
e100: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
e110: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
e120: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
e130: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
e140: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
e150: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
e160: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
e170: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
e180: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
e190: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
e1a0: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
e1b0: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
e1c0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
e1d0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
e1e0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
e1f0: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
e200: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
e210: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
e220: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
e230: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
e240: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
e250: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
e260: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
e270: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
e280: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
e290: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
e2a0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
e2b0: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
e2c0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
e2d0: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
e2e0: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
e2f0: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
e300: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
e310: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
e320: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
e330: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
e340: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
e350: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
e360: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
e370: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
e380: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
e390: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
e3a0: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
e3b0: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
e3c0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
e3d0: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
e3e0: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
e3f0: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
e400: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
e410: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
e420: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
e430: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
e440: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
e450: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
e460: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
e470: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
e480: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
e490: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
e4a0: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
e4b0: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
e4c0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
e4d0: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
e4e0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
e4f0: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
e500: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
e510: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
e520: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
e530: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
e540: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
e550: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
e560: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
e570: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
e580: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
e590: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
e5a0: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
e5b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e5d0: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
e5e0: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
e5f0: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
e600: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
e610: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
e620: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
e630: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
e640: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
e650: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
e660: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
e670: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
e680: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
e690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e6a0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
e6b0: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
e6c0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
e6d0: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
e6e0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
e6f0: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
e700: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
e710: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
e720: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
e730: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
e740: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
e750: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
e760: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
e770: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
e780: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
e790: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
e7a0: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
e7b0: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
e7c0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
e7d0: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
e7e0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
e7f0: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
e800: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
e810: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
e820: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
e830: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
e840: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
e850: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
e860: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
e870: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
e880: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
e890: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
e8a0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
e8b0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
e8c0: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
e8d0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
e8e0: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
e8f0: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
e900: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
e910: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
e920: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
e930: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
e940: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
e950: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
e960: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
e970: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
e980: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
e990: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
e9a0: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
e9b0: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
e9c0: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
e9d0: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
e9e0: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
e9f0: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
ea00: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
ea10: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
ea20: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
ea30: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
ea40: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
ea50: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
ea60: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
ea70: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
ea80: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
ea90: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
eaa0: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
eab0: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
eac0: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
ead0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
eae0: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
eaf0: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
eb00: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
eb10: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
eb20: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
eb30: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
eb40: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
eb50: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
eb60: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
eb70: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
eb80: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
eb90: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
eba0: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
ebb0: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
ebc0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
ebd0: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
ebe0: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
ebf0: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
ec00: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
ec10: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
ec20: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
ec30: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
ec40: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
ec50: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
ec60: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
ec70: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
ec80: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
ec90: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
eca0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
ecb0: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
ecc0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
ecd0: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
ece0: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
ecf0: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
ed00: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
ed10: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
ed20: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
ed30: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
ed40: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
ed50: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
ed60: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
ed70: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
ed80: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
ed90: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
eda0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
edb0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
edc0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
edd0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
ede0: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
edf0: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
ee00: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
ee10: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
ee20: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
ee30: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
ee40: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
ee50: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
ee60: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
ee70: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
ee80: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
ee90: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
eea0: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
eeb0: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
eec0: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
eed0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
eee0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
eef0: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
ef00: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
ef10: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
ef20: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
ef30: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
ef40: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
ef50: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
ef60: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
ef70: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
ef80: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
ef90: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
efa0: 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73 74  .#endif.  LogEst
efb0: 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
efc0: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
efd0: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
efe0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
eff0: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
f000: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
f010: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
f020: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
f030: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
f040: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
f050: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
f060: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
f070: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
f080: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
f090: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f0b0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f0c0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
f0d0: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
f0e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f0f0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
f100: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
f110: 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
f120: 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
f130: 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
f140: 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
f150: 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
f160: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
f170: 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
f180: 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
f190: 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
f1a0: 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
f1b0: 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
f1c0: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
f1d0: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
f1e0: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
f1f0: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
f200: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
f210: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
f220: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
f230: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
f240: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f250: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
f260: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
f270: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
f280: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
f290: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
f2a0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
f2b0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
f2c0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
f2d0: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
f2e0: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
f2f0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
f300: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
f310: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
f320: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
f330: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
f340: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
f350: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
f360: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
f370: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
f380: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
f390: 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
f3a0: 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
f3b0: 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
f3c0: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
f3d0: 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
f3e0: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
f3f0: 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
f400: 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
f410: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
f420: 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
f430: 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
f440: 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
f450: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
f460: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
f470: 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
f480: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
f490: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
f4a0: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
f4b0: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
f4c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
f4d0: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
f4e0: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
f4f0: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
f500: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
f510: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
f520: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
f530: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
f540: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
f550: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
f560: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
f570: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
f580: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
f590: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
f5a0: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
f5b0: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
f5c0: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
f5d0: 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
f5e0: 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
f5f0: 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50  No rowid used. P
f600: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
f610: 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  e key */.../*.**
f620: 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
f630: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
f640: 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
f650: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
f660: 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
f670: 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
f680: 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
f690: 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
f6a0: 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
f6b0: 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
f6c0: 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
f6d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f6e0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
f6f0: 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
f700: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
f710: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
f720: 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
f730: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
f740: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
f750: 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
f760: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
f770: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
f780: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
f790: 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
f7a0: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
f7b0: 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
f7c0: 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
f7d0: 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
f7e0: 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
f7f0: 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
f800: 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
f810: 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  utRowid)==0)../*
f820: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
f830: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
f840: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
f850: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f860: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
f870: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
f880: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
f890: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
f8a0: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
f8b0: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
f8c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
f8d0: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
f8e0: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
f8f0: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
f900: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
f910: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
f920: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
f930: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
f940: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
f950: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
f960: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
f970: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
f980: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
f990: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
f9a0: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
f9b0: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
f9c0: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
f9d0: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
f9e0: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
f9f0: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
fa00: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
fa10: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
fa20: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
fa30: 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
fa40: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
fa50: 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
fa60: 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
fa70: 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
fa80: 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
fa90: 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
faa0: 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
fab0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
fac0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
fad0: 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
fae0: 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
faf0: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
fb00: 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
fb10: 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
fb20: 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
fb30: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
fb40: 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
fb50: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
fb60: 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
fb70: 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
fb80: 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
fb90: 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
fba0: 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
fbb0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
fbc0: 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
fbd0: 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
fbe0: 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
fbf0: 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
fc00: 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
fc10: 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
fc20: 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
fc30: 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
fc40: 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
fc50: 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
fc60: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
fc70: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
fc80: 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
fc90: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
fca0: 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
fcb0: 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
fcc0: 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
fcd0: 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
fce0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
fcf0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
fd00: 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
fd10: 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
fd20: 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
fd30: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
fd40: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
fd50: 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
fd60: 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
fd70: 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
fd80: 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
fd90: 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
fda0: 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
fdb0: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
fdc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
fdd0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
fde0: 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
fdf0: 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
fe00: 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
fe10: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
fe20: 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
fe30: 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
fe40: 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
fe50: 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
fe60: 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
fe70: 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
fe80: 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
fe90: 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
fea0: 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
feb0: 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
fec0: 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
fed0: 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
fee0: 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
fef0: 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
ff00: 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
ff10: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
ff20: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
ff30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ff40: 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
ff50: 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
ff60: 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
ff70: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
ff80: 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
ff90: 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
ffa0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
ffb0: 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
ffc0: 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
ffd0: 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
ffe0: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
fff0: 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
10000 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
10010 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
10020 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
10030 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
10040 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
10050 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
10060 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10070 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
10080 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10090 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
100a0 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
100b0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
100c0 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
100d0 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
100e0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
100f0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
10100 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
10110 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
10120 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
10130 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
10140 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
10150 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
10160 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
10170 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
10180 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
10190 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
101a0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
101b0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
101c0 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
101d0 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
101e0 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
101f0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
10200 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
10210 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
10220 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
10230 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
10240 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
10250 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
10260 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
10270 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
10280 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
10290 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
102a0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
102b0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
102c0 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
102d0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
102e0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
102f0 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
10300 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
10310 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10320 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
10330 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
10340 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
10350 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
10360 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
10370 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
10380 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
10390 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
103a0 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
103b0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
103c0 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
103d0 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
103e0 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
103f0 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
10400 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
10410 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
10420 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
10430 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
10440 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
10450 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
10460 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
10470 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
10480 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
10490 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
104a0 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
104b0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
104c0 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
104d0 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
104e0 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
104f0 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
10500 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10510 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
10520 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
10530 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
10540 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
10550 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
10560 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
10570 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
10580 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
10590 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
105a0 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
105b0 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
105c0 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
105d0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
105e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
105f0 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
10600 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
10610 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
10620 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
10630 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
10640 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
10650 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
10660 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
10670 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
10680 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
10690 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
106a0 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
106b0 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
106c0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
106d0 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
106e0 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
106f0 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
10700 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
10710 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
10720 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
10730 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
10740 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
10750 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
10760 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
10770 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
10780 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
10790 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
107a0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
107b0 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
107c0 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
107d0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
107e0 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
107f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
10800 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
10810 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
10820 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
10830 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
10840 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
10850 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
10860 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
10870 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10880 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10890 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
108a0 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
108b0 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
108c0 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
108d0 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
108e0 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
108f0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
10900 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
10910 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
10920 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
10930 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
10940 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
10950 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
10960 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
10970 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
10980 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
10990 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
109a0 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
109b0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
109c0 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
109d0 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
109e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
109f0 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
10a00 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
10a10 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
10a20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
10a30 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
10a40 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
10a50 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
10a60 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
10a70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10a80 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
10a90 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
10aa0 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
10ab0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10ac0 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
10ad0 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
10ae0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
10af0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
10b00 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10b10 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
10b20 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
10b30 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
10b40 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
10b50 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
10b60 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
10b70 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
10b80 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
10b90 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
10ba0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
10bb0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10bc0 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
10bd0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10be0 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
10bf0 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
10c00 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
10c10 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
10c20 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
10c30 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
10c40 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
10c50 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
10c60 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
10c70 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
10c80 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
10c90 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
10ca0 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
10cb0 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
10cc0 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
10cd0 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
10ce0 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
10cf0 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
10d00 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
10d10 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
10d20 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
10d30 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
10d40 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
10d50 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
10d60 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
10d70 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
10d80 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
10d90 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
10da0 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
10db0 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
10dc0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
10dd0 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
10de0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
10df0 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
10e00 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
10e10 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
10e20 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
10e30 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
10e40 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
10e50 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
10e60 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
10e70 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
10e80 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
10e90 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
10ea0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
10eb0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
10ec0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10ed0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
10ee0 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
10ef0 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
10f00 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
10f10 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
10f20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
10f30 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
10f40 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
10f50 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
10f60 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
10f70 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  OMEM) */.  Mem *
10f80 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
10f90 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
10fa0 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
10fb0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
10fc0 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
10fd0 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10ff0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
11000 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
11010 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
11020 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
11030 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11040 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
11050 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11060 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11070 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
11080 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
11090 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
110a0 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
110b0 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
110c0 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
110d0 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
110e0 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
110f0 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
11100 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
11110 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
11120 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
11130 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
11140 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
11150 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
11160 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
11170 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
11180 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
11190 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
111a0 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
111b0 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
111c0 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
111d0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
111e0 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
111f0 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
11200 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
11210 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
11220 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
11230 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
11240 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
11250 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
11260 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
11270 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
11280 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
11290 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
112a0 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
112b0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
112c0 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
112d0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
112e0 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
112f0 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
11300 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
11310 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
11320 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
11330 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
11340 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
11350 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
11360 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
11370 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
11380 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
11390 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
113a0 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
113b0 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
113c0 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
113d0 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
113e0 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
113f0 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
11400 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
11410 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
11420 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
11430 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
11440 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
11450 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
11460 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
11470 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
11480 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
11490 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
114a0 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
114b0 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
114c0 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
114d0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
114e0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
114f0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
11500 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
11510 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
11520 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
11530 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
11540 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
11550 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
11560 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
11570 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
11580 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
11590 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
115a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
115b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
115c0 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
115d0 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
115e0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
115f0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
11600 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
11610 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
11620 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
11630 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
11640 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
11650 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
11660 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
11670 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
11680 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
11690 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
116a0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
116b0 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
116c0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
116d0 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
116e0 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
116f0 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
11700 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
11710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
11720 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
11730 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
11740 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
11750 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
11760 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
11770 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
11780 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
11790 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
117a0 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b  fo;       /* A K
117b0 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75  eyInfo object su
117c0 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20  itable for this 
117d0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74  index */.  int t
117e0 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
117f0 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
11800 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
11810 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
11820 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
11830 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
11840 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
11850 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
11860 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
11870 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
11880 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
11890 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
118a0 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
118b0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
118c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
118d0 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
118e0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
118f0 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
11900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
11910 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
11920 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
11930 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
11940 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
11950 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  ;      /* 1==UNI
11960 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
11970 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
11980 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
11990 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
119a0 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
119b0 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
119c0 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
119d0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
119e0 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
119f0 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
11a00 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
11a10 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
11a20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
11a30 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
11a40 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
11a50 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
11a60 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
11a70 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
11a80 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
11a90 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
11aa0 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69  ring index */.#i
11ab0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
11ac0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
11ad0 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11af0 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
11b00 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
11b10 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
11b20 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
11b30 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
11b40 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
11b50 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
11b60 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
11b70 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
11b80 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
11b90 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
11ba0 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
11bb0 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
11bc0 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
11bd0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
11be0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
11bf0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
11c00 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
11c10 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
11c20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
11c30 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
11c40 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
11c50 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
11c60 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
11c70 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
11c80 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
11c90 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
11ca0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
11cb0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
11cc0 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
11cd0 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
11ce0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
11cf0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
11d00 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
11d10 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
11d20 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
11d30 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
11d40 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
11d50 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
11d60 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
11d70 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
11d80 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
11d90 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
11da0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
11db0 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
11dc0 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
11dd0 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
11de0 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
11df0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
11e00 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
11e10 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
11e20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
11e30 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
11e40 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
11e50 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
11e60 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
11e70 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
11e80 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
11e90 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
11ea0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
11eb0 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
11ec0 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
11ed0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11ee0 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
11ef0 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
11f00 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
11f10 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
11f20 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
11f30 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
11f40 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
11f50 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
11f60 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
11f70 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
11f80 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
11f90 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
11fa0 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
11fb0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
11fc0 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
11fd0 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
11fe0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
11ff0 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
12000 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
12010 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
12020 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
12030 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
12040 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
12050 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
12060 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
12070 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
12080 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
12090 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
120a0 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
120b0 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
120c0 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
120d0 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
120e0 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
120f0 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
12100 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
12110 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
12120 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
12130 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
12140 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
12150 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
12160 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
12170 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
12180 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
12190 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
121a0 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
121b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
121c0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
121d0 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
121e0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
121f0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
12200 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
12210 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
12220 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
12230 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
12240 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
12250 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
12260 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
12270 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
12280 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
12290 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
122a0 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
122b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
122c0 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
122d0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
122e0 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
122f0 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
12300 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
12310 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
12320 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
12330 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
12340 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
12350 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
12360 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
12370 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
12380 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
12390 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
123a0 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
123b0 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
123c0 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
123d0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
123e0 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
123f0 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
12400 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
12410 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
12420 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
12430 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
12440 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
12450 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
12460 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
12470 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
12480 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
124b0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
124c0 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
124d0 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
124e0 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
124f0 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
12500 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
12510 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
12520 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
12550 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
12560 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
12570 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
12580 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
12590 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
125a0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
125b0 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
125c0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
125d0 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
125e0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
125f0 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
12600 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
12610 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
12620 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
12630 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
12640 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
12650 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
12660 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
12670 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
12680 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
12690 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
126a0 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
126b0 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
126c0 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
126d0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
126e0 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
126f0 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
12700 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
12710 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
12720 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
12730 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
12740 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
12750 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
12760 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
12770 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
12780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
12790 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
127a0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
127b0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
127c0 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
127d0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
127e0 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
127f0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
12800 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
12810 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
12820 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
12830 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
12840 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
12850 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
12860 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
12870 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
12880 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
12890 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
128a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
128b0 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
128c0 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
128d0 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
128e0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
128f0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
12900 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
12910 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
12940 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
12950 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
12960 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
12990 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
129a0 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
129b0 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
129c0 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
129d0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
129e0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
129f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
12a00 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
12a10 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
12a20 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
12a30 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
12a40 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
12a50 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
12a60 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
12a70 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
12a80 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
12a90 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
12aa0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
12ab0 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
12ac0 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
12ad0 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
12ae0 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
12af0 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
12b00 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
12b10 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
12b20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12b30 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
12b40 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
12b50 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
12b60 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
12b70 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
12b80 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
12b90 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
12ba0 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
12bb0 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
12bc0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
12bd0 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
12be0 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
12bf0 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
12c00 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
12c10 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
12c20 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
12c30 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
12c40 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
12c50 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
12c60 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
12c70 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
12c80 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
12c90 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
12ca0 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
12cb0 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
12cc0 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
12cd0 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
12ce0 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
12cf0 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
12d00 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
12d10 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
12d20 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
12d30 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
12d40 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
12d50 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
12d60 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
12d70 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
12d80 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
12d90 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
12da0 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
12db0 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
12dc0 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
12dd0 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
12de0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
12df0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
12e00 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
12e10 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12e20 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
12e30 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
12e40 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
12e50 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
12e60 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
12e70 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
12e80 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
12e90 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
12ea0 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
12eb0 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
12ec0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
12ed0 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
12ee0 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
12ef0 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
12f00 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
12f10 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
12f20 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
12f30 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
12f40 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
12f50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
12f60 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
12f70 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
12f80 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
12f90 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
12fa0 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
12fb0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
12fc0 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
12fd0 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
12fe0 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
12ff0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
13000 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
13010 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
13020 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
13030 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
13040 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
13050 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13060 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
13070 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
13080 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
13090 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
130a0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
130b0 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
130c0 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
130d0 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
130e0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
130f0 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
13100 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
13110 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
13120 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
13130 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
13140 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
13150 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
13160 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13170 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
13180 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
13190 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
131a0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
131b0 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
131c0 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
131d0 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
131e0 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
131f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13200 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
13210 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
13220 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
13230 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
13240 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
13250 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
13260 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
13270 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
13280 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
13290 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
132a0 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
132b0 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
132c0 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
132d0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
132e0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
132f0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
13300 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
13310 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
13320 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
13330 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
13340 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
13350 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
13360 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
13370 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
13380 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
13390 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
133a0 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
133b0 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
133c0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
133d0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
133e0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
133f0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
13400 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
13410 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
13420 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
13430 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
13440 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
13450 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
13460 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
13470 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
13480 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
13490 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
134a0 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
134b0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
134c0 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
134d0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
134e0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
134f0 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
13500 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
13510 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
13520 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
13530 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
13540 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
13550 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
13560 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
13570 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
13580 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
13590 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
135a0 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
135b0 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
135c0 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
135d0 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
135e0 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
135f0 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
13600 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
13610 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
13620 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
13630 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
13640 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
13650 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
13660 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
13670 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
13680 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
13690 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
136a0 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
136b0 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
136c0 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
136d0 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
136e0 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
136f0 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
13700 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
13710 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
13720 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
13730 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
13740 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
13750 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
13760 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
13770 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
13780 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
13790 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
137a0 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
137b0 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
137c0 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
137d0 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
137e0 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
137f0 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
13800 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
13810 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
13820 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
13830 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
13840 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
13850 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
13860 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
13870 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
13880 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
13890 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
138a0 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
138b0 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
138c0 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
138d0 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
138e0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
138f0 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
13900 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
13910 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
13920 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
13930 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
13940 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
13950 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
13960 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
13970 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
13980 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
13990 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
139a0 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
139b0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
139c0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
139d0 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
139e0 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
139f0 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
13a00 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
13a10 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
13a20 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
13a30 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
13a40 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
13a50 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
13a60 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
13a70 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
13a80 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
13a90 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
13aa0 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
13ab0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
13ac0 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
13ad0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
13ae0 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
13af0 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
13b00 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
13b10 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
13b20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
13b30 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
13b40 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
13b50 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
13b60 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
13b70 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
13b80 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
13b90 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
13ba0 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13bc0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
13bd0 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
13be0 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
13bf0 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
13c00 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
13c10 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
13c20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
13c30 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
13c40 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
13c50 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
13c60 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
13c70 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
13c80 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
13c90 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
13ca0 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
13cb0 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a  lfunction. .  **
13cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13ce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13cf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13d00 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
13d10 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
13d20 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
13d30 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
13d40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
13d50 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
13d60 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
13d70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
13d80 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
13d90 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
13da0 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
13db0 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
13dc0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
13dd0 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
13de0 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
13df0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
13e00 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
13e10 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
13e20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
13e30 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
13e40 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
13e50 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
13e60 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
13e70 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
13e80 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
13e90 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
13ea0 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
13eb0 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
13ec0 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
13ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13f10 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
13f20 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
13f30 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
13f40 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13f50 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
13f60 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
13f70 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
13f80 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
13f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
13fa0 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
13fb0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
13fc0 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
13ff0 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
14000 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
14030 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
14040 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
14050 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
14060 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30  _Unlikely:  1000
14070 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
14080 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
14090 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
140a0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
140b0 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
140c0 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
140f0 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
14100 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
14110 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14130 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
14140 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
14150 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
14160 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
14170 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
14180 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
14190 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
141a0 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
141b0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
141c0 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
141d0 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
141e0 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
14210 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
14220 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
14230 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
14240 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
14250 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
14260 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
14270 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
14280 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
14290 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
142a0 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
142b0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
142c0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
142d0 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
142e0 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
142f0 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
14300 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
14310 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
14320 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
14330 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
14340 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
14350 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
14360 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
14370 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
14380 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
14390 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
143a0 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
143b0 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
143c0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
143d0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
143e0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
143f0 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
14400 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
14410 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
14420 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
14430 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
14440 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
14450 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
14460 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
14470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
14480 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
14490 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
144a0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
144b0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
144c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
144d0 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
144e0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
144f0 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
14500 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
14510 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
14520 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
14530 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
14540 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
14550 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
14560 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
14570 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
14580 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
14590 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
145a0 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
145b0 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
145c0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
145d0 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
145e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
145f0 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
14600 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
14610 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
14620 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
14630 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
14640 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
14650 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
14660 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
14670 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
14680 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
14690 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
146a0 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
146b0 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
146c0 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
146d0 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
146e0 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
146f0 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
14700 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
14710 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
14720 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
14730 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
14740 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
14750 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
14760 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
14770 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
14780 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
14790 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
147a0 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
147b0 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
147c0 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
147d0 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
147e0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
147f0 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
14800 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
14810 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
14820 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
14830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
14840 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
14850 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
14860 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
14870 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
14880 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
14890 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
148a0 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
148b0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
148c0 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
148d0 61 6e 74 20 20 30 78 30 38 30 30 30 30 20 2f 2a  ant  0x080000 /*
148e0 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e 73 74   Node is a const
148f0 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ant */../*.** Th
14900 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
14910 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
14920 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
14930 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78  ts in the .** Ex
14940 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
14950 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
14960 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
14970 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
14980 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
14990 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
149a0 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
149b0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
149c0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
149d0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
149e0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
149f0 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
14a00 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
14a10 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
14a20 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
14a30 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
14a40 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
14a50 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
14a60 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
14a70 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
14a80 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
14a90 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
14aa0 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
14ab0 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
14ac0 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
14ad0 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
14ae0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
14af0 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
14b00 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
14b10 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
14b20 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
14b30 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
14b40 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
14b50 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
14b60 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
14b70 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
14b80 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
14b90 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20  y a normal Expr 
14ba0 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
14bb0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
14bc0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
14bd0 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
14be0 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e  flags .** and an
14bf0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
14c00 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
14c10 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
14c20 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
14c30 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
14c40 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
14c50 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
14c60 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
14c70 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
14c80 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
14c90 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
14ca0 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
14cb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
14cc0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
14cd0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
14ce0 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
14cf0 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
14d00 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
14d10 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
14d20 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
14d30 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
14d40 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a  ader comment .**
14d50 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
14d60 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
14d70 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
14d80 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
14d90 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
14da0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
14db0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
14dc0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
14dd0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
14de0 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
14df0 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
14e00 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
14e10 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
14e20 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
14e30 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
14e40 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
14e50 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
14e60 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
14e70 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
14e80 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
14e90 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
14ea0 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
14eb0 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
14ec0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
14ed0 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
14ee0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
14ef0 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
14f00 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
14f10 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
14f20 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
14f30 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
14f40 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
14f50 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
14f60 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
14f70 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
14f80 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
14f90 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
14fa0 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
14fb0 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
14fc0 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
14fd0 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
14fe0 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
14ff0 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
15000 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
15010 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
15020 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
15030 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
15040 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
15050 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
15060 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
15070 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
15080 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
15090 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
150a0 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
150b0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
150c0 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
150d0 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
150e0 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
150f0 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
15100 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
15110 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
15120 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
15130 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
15140 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
15150 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15160 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
15170 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72  he list */.  str
15180 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
15190 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
151a0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
151b0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
151c0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
151d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
151e0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
151f0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
15200 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
15210 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
15220 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
15230 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
15240 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
15250 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
15260 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
15270 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
15280 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
15290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
152a0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
152b0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
152c0 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
152d0 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
152e0 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
152f0 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
15300 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
15310 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
15320 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
15330 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
15340 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
15350 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
15360 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
15370 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
15380 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69  sable */.    uni
15390 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
153a0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
153b0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
153c0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
153d0 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
153e0 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
153f0 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
15400 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
15410 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
15420 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
15430 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
15440 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
15450 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
15460 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
15470 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
15480 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
15490 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b      } u;.  } *a;
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
154c0 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
154d0 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
154e0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
154f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
15500 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
15510 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
15520 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
15530 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
15540 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
15550 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
15560 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
15570 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
15580 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
15590 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
155a0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
155b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
155c0 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
155d0 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
155e0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
155f0 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
15600 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
15610 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
15620 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
15630 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
15640 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
15650 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
15660 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15670 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
15680 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
15690 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
156a0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
156b0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
156c0 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
156d0 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
156e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
156f0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
15700 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
15710 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
15720 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
15730 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
15740 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
15750 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
15760 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
15770 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
15780 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
15790 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
157a0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
157b0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
157c0 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
157d0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
157e0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
157f0 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
15800 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
15810 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
15820 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
15830 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
15840 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
15850 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
15860 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
15870 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
15880 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
15890 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
158a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
158b0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
158c0 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
158d0 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
158e0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
158f0 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
15900 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
15910 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
15920 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
15930 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15940 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
15950 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
15960 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
15970 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
15980 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
15990 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
159a0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
159b0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
159c0 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
159d0 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
159e0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
159f0 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
15a00 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
15a10 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
15a20 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
15a30 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
15a40 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
15a50 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
15a60 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
15a70 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
15a80 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
15a90 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
15aa0 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
15ab0 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
15ac0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
15ad0 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
15ae0 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
15af0 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
15b00 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
15b10 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
15b20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
15b30 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53  (n)).#define MAS
15b40 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73  KBIT32(n) (((uns
15b50 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e  igned int)1)<<(n
15b60 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
15b70 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
15b80 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
15b90 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
15ba0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15bb0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
15bc0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
15bd0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
15be0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
15bf0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
15c00 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
15c10 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
15c20 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
15c30 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
15c40 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
15c50 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
15c60 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
15c70 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
15c80 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
15c90 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
15ca0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
15cb0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
15cc0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
15cd0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
15ce0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
15cf0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
15d00 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
15d10 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
15d20 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
15d30 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
15d40 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
15d50 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
15d60 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
15d70 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
15d80 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
15d90 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
15da0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
15db0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
15dc0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
15dd0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
15de0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
15df0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
15e00 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
15e10 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
15e20 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
15e30 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
15e40 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
15e50 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
15e60 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
15e70 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
15e80 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
15e90 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
15ea0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
15eb0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
15ec0 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
15ed0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
15ee0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
15ef0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
15f00 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
15f10 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
15f20 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
15f30 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
15f40 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
15f50 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
15f60 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
15f70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15f80 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
15f90 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
15fa0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
15fb0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
15fc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
15fd0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
15fe0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
15ff0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
16000 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
16010 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
16020 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
16030 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
16040 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
16050 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
16060 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
16070 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
16080 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
16090 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
160a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
160b0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
160c0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
160d0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
160e0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
160f0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
16100 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
16110 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
16120 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
16130 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
16140 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
16150 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
16160 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
16170 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
16180 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
16190 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
161a0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
161b0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
161c0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
161d0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
161e0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
161f0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
16200 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
16210 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
16220 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
16230 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
16240 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
16250 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
16260 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75  routine */.    u
16270 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
16280 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
16290 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62   between this ab
162a0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
162b0 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ous */.    unsig
162c0 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
162d0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
162e0 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
162f0 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
16300 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
16310 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
16320 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
16330 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
16340 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ted */.    unsig
16350 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
16360 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
16370 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
16380 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  tine */.    unsi
16390 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
163a0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
163b0 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
163c0 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
163d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
163e0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
163f0 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
16400 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
16410 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
16420 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
16430 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
16440 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
16450 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
16460 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
16470 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
16480 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
16490 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
164a0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
164b0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
164c0 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
164d0 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
164e0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
164f0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
16500 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
16510 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
16520 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
16530 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
16540 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
16550 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
16560 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
16570 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
16580 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
16590 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
165a0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
165b0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
165c0 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
165d0 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
165e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
165f0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
16600 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
16610 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
16620 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
16630 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
16640 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
16650 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
16660 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
16670 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
16680 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
16690 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
166a0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
166b0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
166c0 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
166d0 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
166e0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
166f0 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
16700 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
16710 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
16720 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
16730 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
16740 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
16750 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
16760 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
16770 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
16780 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
16790 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
167a0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
167b0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
167c0 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
167d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
167e0 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
167f0 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
16800 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
16810 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
16820 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
16830 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
16840 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
16850 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
16860 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
16870 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
16880 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
16890 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
168a0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
168b0 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
168c0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
168d0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
168e0 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
168f0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
16900 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
16910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16920 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
16930 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
16940 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
16950 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
16960 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16970 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
16980 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
16990 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
169a0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
169b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
169c0 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
169d0 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
169e0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
169f0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
16a00 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
16a10 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
16a20 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
16a30 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
16a40 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
16a50 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
16a60 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
16a70 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
16a80 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
16a90 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
16aa0 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
16ab0 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
16ac0 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
16ad0 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
16ae0 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
16af0 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20  ERE_AND_ONLY    
16b00 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
16b10 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73  on't use indices
16b20 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f   for OR terms */
16b30 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
16b40 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
16b50 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0100 /* pOrder
16b60 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
16b70 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
16b80 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
16b90 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30  TBY       0x0200
16ba0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
16bb0 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
16bc0 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
16bd0 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
16be0 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30  ISTINCT    0x040
16bf0 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
16c00 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
16c10 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
16c20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
16c30 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a  P      0x0800 /*
16c40 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
16c50 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
16c60 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
16c70 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20  _REOPEN_IDX     
16c80 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20    0x1000 /* Try 
16c90 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e  to use OP_Reopen
16ca0 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77  Idx */../* Allow
16cb0 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
16cc0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65   from sqlite3Whe
16cd0 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a  reIsDistinct().*
16ce0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
16cf0 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20  DISTINCT_NOOP   
16d00 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43     0  /* DISTINC
16d10 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73  T keyword not us
16d20 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
16d30 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49  ERE_DISTINCT_UNI
16d40 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20  QUE    1  /* No 
16d50 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64  duplicates */.#d
16d60 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
16d70 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32  INCT_ORDERED   2
16d80 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61    /* All duplica
16d90 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74  tes are adjacent
16da0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
16db0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44  E_DISTINCT_UNORD
16dc0 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69  ERED 3  /* Dupli
16dd0 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65  cates are scatte
16de0 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  red */../*.** A 
16df0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69  NameContext defi
16e00 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e  nes a context in
16e10 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76   which to resolv
16e20 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75  e table and colu
16e30 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68  mn.** names.  Th
16e40 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73  e context consis
16e50 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20  ts of a list of 
16e60 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63  tables (the pSrc
16e70 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a  List) field and.
16e80 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ** a list of nam
16e90 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70  ed expression (p
16ea0 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d  EList).  The nam
16eb0 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  ed expression li
16ec0 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c  st may.** be NUL
16ed0 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72  L.  The pSrc cor
16ee0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
16ef0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
16f00 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f   SELECT or.** to
16f10 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
16f20 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20   operated on by 
16f30 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
16f40 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a  or DELETE.  The.
16f50 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73  ** pEList corres
16f60 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73  ponds to the res
16f70 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c  ult set of a SEL
16f80 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20  ECT and is NULL 
16f90 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61  for.** other sta
16fa0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e  tements..**.** N
16fb0 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20  ameContexts can 
16fc0 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e  be nested.  When
16fd0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
16fe0 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74  , the inner-most
16ff0 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20   .** context is 
17000 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
17010 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
17020 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
17030 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
17040 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
17050 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
17060 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
17070 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
17080 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
17090 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
170a0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
170b0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
170c0 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
170d0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
170e0 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
170f0 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
17100 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
17110 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
17120 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
17130 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a  incremented. .**
17140 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
17150 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
17160 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
17170 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
17180 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
17190 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
171a0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
171b0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
171c0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
171d0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
171e0 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
171f0 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
17200 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
17210 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
17220 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
17230 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
17240 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
17250 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
17260 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
17270 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
17280 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
17290 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
172a0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
172b0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
172c0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
172d0 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
172e0 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c  al list of resul
172f0 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t-set columns */
17300 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
17310 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
17320 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
17330 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
17340 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
17350 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
17360 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
17370 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
17380 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
17390 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
173a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
173b0 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
173c0 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
173d0 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
173e0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
173f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
17400 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
17410 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
17420 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63  names */.  u8 nc
17430 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
17440 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
17450 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
17460 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
17470 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
17480 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
17490 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
174a0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
174b0 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
174c0 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72   0x01    /* Aggr
174d0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
174e0 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
174f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
17500 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20  asAgg    0x02   
17510 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
17520 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17530 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
17540 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
17550 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65   0x04    /* True
17560 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
17570 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
17580 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
17590 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
175a0 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75  c 0x08    /* Tru
175b0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
175c0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
175d0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
175e0 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
175f0 30 78 31 30 20 20 20 20 2f 2a 20 54 72 75 65 20  0x10    /* True 
17600 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
17610 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
17620 52 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  RE */../*.** An 
17630 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
17640 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
17650 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
17660 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
17670 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
17680 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
17690 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
176a0 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69  ement..**.** nLi
176b0 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31  mit is set to -1
176c0 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
176d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e  LIMIT clause.  n
176e0 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f  Offset is set to
176f0 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20   0..** If there 
17700 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  is a LIMIT claus
17710 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65  e, the parser se
17720 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65  ts nLimit to the
17730 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a   value of the.**
17740 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73   limit and nOffs
17750 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
17760 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f  of the offset (o
17770 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20  r 0 if there is 
17780 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20  not.** offset). 
17790 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e   But later on, n
177a0 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  Limit and nOffse
177b0 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d  t become the mem
177c0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a  ory locations.**
177d0 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61   in the VDBE tha
177e0 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d  t record the lim
177f0 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f  it and offset co
17800 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64  unters..**.** ad
17810 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74  drOpenEphm[] ent
17820 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65  ries contain the
17830 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f   address of OP_O
17840 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
17850 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61  odes..** These a
17860 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65  ddresses must be
17870 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20   stored so that 
17880 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61  we can go back a
17890 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68  nd fill in.** th
178a0 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64  e P4_KEYINFO and
178b0 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c   P2 parameters l
178c0 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74  ater.  Neither t
178d0 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a  he KeyInfo nor.*
178e0 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
178f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61  columns in P2 ca
17900 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74  n be computed at
17910 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a   the same time.*
17920 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e  * as the OP_Open
17930 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  Ephm instruction
17940 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73   is coded becaus
17950 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  e not.** enough 
17960 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
17970 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71  t the compound q
17980 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74  uery is known at
17990 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20   that point..** 
179a0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
179b0 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20  addrOpenTran[0] 
179c0 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73  and [1] contains
179d0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
179e0 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20  nces.** for the 
179f0 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
17a00 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
17a10 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e  rOpenEphm[2] con
17a20 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a  tains collating.
17a30 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72  ** sequences for
17a40 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
17a50 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
17a60 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c  Select {.  ExprL
17a70 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
17a80 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
17a90 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  of the result */
17aa0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
17ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
17ac0 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b   of: TK_UNION TK
17ad0 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43  _ALL TK_INTERSEC
17ae0 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20  T TK_EXCEPT */. 
17af0 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20   u16 selFlags;  
17b00 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
17b10 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
17b20 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
17b30 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
17b40 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
17b50 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
17b60 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
17b70 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  /.  int addrOpen
17b80 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[2];   /* OP
17b90 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
17ba0 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
17bb0 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75  is select */.  u
17bc0 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  64 nSelectRow;  
17bd0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
17be0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
17bf0 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72  ult rows */.  Sr
17c00 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
17c10 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
17c20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
17c30 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
17c40 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
17c50 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
17c60 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
17c70 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
17c80 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
17c90 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
17ca0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
17cb0 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
17cc0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
17cd0 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
17ce0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
17cf0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
17d00 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
17d10 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
17d20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
17d30 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
17d40 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
17d50 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
17d60 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
17d70 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
17d80 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
17d90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
17da0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
17db0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
17dc0 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
17dd0 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
17de0 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
17df0 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
17e00 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
17e10 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
17e20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
17e30 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
17e40 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
17e50 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
17e60 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
17e70 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
17e80 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
17e90 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
17ea0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
17eb0 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69   Flag"..*/.#defi
17ec0 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
17ed0 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
17ee0 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
17ef0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
17f00 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
17f10 64 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20  d        0x0002 
17f20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
17f30 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
17f40 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
17f50 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
17f60 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74   0x0004  /* Cont
17f70 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
17f80 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
17f90 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
17fa0 65 72 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f  eral   0x0008  /
17fb0 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
17fc0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
17fd0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
17fe0 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78  panded        0x
17ff0 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0010  /* sqlite3
18000 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
18010 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
18020 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
18030 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30  ypeInfo     0x00
18040 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  20  /* FROM subq
18050 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
18060 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 20 20  e metadata */.  
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18080 20 20 2f 2a 20 20 20 20 20 30 78 30 30 34 30 20    /*     0x0040 
18090 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0a 23 64 65   NOT USED */.#de
180a0 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
180b0 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20          0x0080  
180c0 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
180d0 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
180e0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
180f0 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
18100 30 78 30 31 30 30 20 20 4e 4f 54 20 55 53 45 44  0x0100  NOT USED
18110 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
18120 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
18130 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
18140 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
18150 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
18160 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
18170 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34  eConvert    0x04
18180 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
18190 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
181a0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
181b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
181c0 72 73 69 76 65 20 20 20 20 20 20 20 30 78 30 38  rsive       0x08
181d0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
181e0 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
181f0 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
18200 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
18210 75 6e 64 20 20 20 20 20 20 20 20 30 78 31 30 30  und        0x100
18220 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
18230 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
18240 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
18250 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
18260 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
18270 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
18280 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
18290 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
182a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
182b0 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
182c0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
182d0 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
182e0 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
182f0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
18300 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
18310 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
18320 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20  rary index .**  
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
18350 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
18360 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
18370 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
18380 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
18390 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
183a0 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
183b0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
183c0 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
183d0 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
183e0 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
183f0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
18400 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
18410 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
18420 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
18430 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
18440 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
18450 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
18460 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
18470 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
18490 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
184a0 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
184b0 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
184e0 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
184f0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
18500 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
18510 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
18520 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
18530 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
18540 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
18550 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
18560 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
18570 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
18580 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
18590 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
185a0 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
185b0 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
185c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
185d0 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
185e0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
185f0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
18600 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
18610 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
18620 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
18630 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
18660 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
18670 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
18680 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
18690 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
186a0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
186b0 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
186c0 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
186f0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
18700 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
18710 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
18720 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
18730 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
18740 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
18750 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
18780 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
18790 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
187a0 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20  Parm. .**       
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
187c0 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
187d0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
187e0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
187f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18800 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
18810 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
18820 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
18830 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
18840 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
18850 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
18860 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
18870 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
18880 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
18890 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
188a0 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
188b0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
188c0 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
188f0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
18900 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
18910 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18920 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
18930 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
18940 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
18950 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18970 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
18980 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
18990 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
189a0 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
189b0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
189c0 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
189f0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
18a00 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
18a10 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
18a20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
18a30 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
18a40 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
18a50 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
18a60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18a70 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
18a80 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
18a90 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
18aa0 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
18ad0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
18ae0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
18af0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
18b00 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
18b10 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
18b20 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
18b30 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
18b40 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
18b50 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
18b60 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
18b70 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
18b80 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
18b90 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
18ba0 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
18bb0 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18bd0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
18be0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
18bf0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
18c20 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
18c30 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
18c40 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
18c50 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
18c60 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
18c70 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
18c90 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
18ca0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
18cb0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
18cc0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
18cd0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
18ce0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
18cf0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
18d00 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
18d30 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
18d40 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
18d50 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
18d60 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
18d70 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
18d80 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
18d90 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
18dc0 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
18dd0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
18de0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
18e10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
18e20 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
18e30 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
18e40 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
18e50 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
18e60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
18e70 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
18e80 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
18e90 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
18ea0 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ec0 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
18ed0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
18ee0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
18ef0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
18f00 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
18f10 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
18f20 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
18f30 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
18f40 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
18f50 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
18f60 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
18f70 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
18f80 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
18f90 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
18fa0 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
18fb0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
18fc0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
18fd0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
18fe0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
18ff0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
19000 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
19010 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
19020 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
19030 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
19040 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
19050 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
19060 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
19070 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
19080 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
19090 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
190a0 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
190b0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
190c0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
190d0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
190e0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
190f0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
19100 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
19110 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
19120 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
19130 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
19140 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
19150 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
19160 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
19170 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
19180 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
19190 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
191a0 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
191b0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
191c0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
191d0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
191e0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
191f0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
19200 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
19210 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
19220 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
19230 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
19240 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
19250 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19260 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
19270 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
19280 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
19290 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
192a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
192b0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
192c0 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
192d0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
192e0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
192f0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
19300 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19310 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
19320 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
19330 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
19340 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
19350 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
19360 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
19370 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
19380 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
19390 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
193a0 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
193b0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
193c0 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
193d0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
193e0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
193f0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
19400 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20  char affSdst;   
19410 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
19420 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
19430 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
19440 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
19450 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
19460 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
19470 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
19480 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
19490 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
194a0 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
194b0 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
194c0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
194d0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
194e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
194f0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
19500 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ated */.  ExprLi
19510 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
19520 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
19530 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
19540 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
19550 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
19560 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
19570 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
19580 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
19590 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
195a0 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  NT .** tables, t
195b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
195c0 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
195d0 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
195e0 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
195f0 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
19600 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
19610 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
19620 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
19630 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
19640 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
19650 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
19660 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
19670 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
19680 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
19690 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
196a0 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74  re down within t
196b0 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
196c0 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
196d0 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
196e0 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
196f0 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
19700 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
19710 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
19720 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
19730 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
19740 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
19750 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
19760 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
19770 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
19780 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
19790 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
197a0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
197b0 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
197c0 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
197d0 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
197e0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
197f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19800 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
19810 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
19820 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
19830 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
19840 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
19850 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
19860 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
19870 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
19880 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
19890 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
198a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
198b0 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
198c0 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
198d0 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
198e0 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
198f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
19900 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
19910 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
19920 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69  for each .** tri
19930 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
19940 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
19950 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
19960 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
19970 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
19980 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
19990 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
199a0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
199b0 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
199c0 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
199d0 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
199e0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
199f0 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
19a00 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
19a10 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
19a20 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
19a30 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
19a40 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
19a50 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
19a60 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
19a70 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
19a80 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
19a90 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
19aa0 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
19ab0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
19ac0 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
19ad0 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
19ae0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
19af0 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
19b00 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
19b10 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
19b20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
19b30 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
19b40 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
19b50 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
19b60 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
19b70 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
19b80 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
19b90 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
19ba0 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
19bb0 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
19bc0 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
19bd0 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73   of INSERT .** s
19be0 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
19bf0 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
19c00 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
19c10 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
19c20 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
19c30 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
19c40 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
19c50 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
19c60 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
19c70 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
19c80 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
19c90 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
19ca0 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
19cb0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
19cc0 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
19cd0 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
19ce0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
19cf0 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
19d00 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
19d10 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
19d20 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
19d30 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
19d40 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
19d50 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
19d60 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
19d70 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
19d80 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
19d90 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
19da0 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
19db0 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
19dc0 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
19dd0 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
19de0 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
19df0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
19e00 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
19e10 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
19e20 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e  >30.  typedef un
19e30 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d  signed char yDbM
19e40 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f  ask[(SQLITE_MAX_
19e50 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a  ATTACHED+9)/8];.
19e60 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
19e70 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
19e80 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49  )[(I)/8]&(1<<((I
19e90 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66  )&7)))!=0).# def
19ea0 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
19eb0 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d  )      memset((M
19ec0 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23  ),0,sizeof(M)).#
19ed0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
19ee0 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28  t(M,I)     (M)[(
19ef0 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26  I)/8]|=(1<<((I)&
19f00 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  7)).# define DbM
19f10 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
19f20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
19f30 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65  Zero(M).# define
19f40 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
19f50 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61  )   (sqlite3DbMa
19f60 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29  skAllZero(M)==0)
19f70 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
19f80 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
19f90 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20  bMask;.# define 
19fa0 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
19fb0 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d     (((M)&(((yDbM
19fc0 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30  ask)1)<<(I)))!=0
19fd0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
19fe0 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d  kZero(M)      (M
19ff0 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  )=0.# define DbM
1a000 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1a010 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29  (M)|=(((yDbMask)
1a020 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e  1)<<(I)).# defin
1a030 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1a040 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65  M)   (M)==0.# de
1a050 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1a060 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23  ro(M)   (M)!=0.#
1a070 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1a080 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
1a090 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
1a0a0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1a0b0 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
1a0c0 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
1a0d0 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
1a0e0 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
1a0f0 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
1a100 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
1a110 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
1a120 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
1a130 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
1a140 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
1a150 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
1a160 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
1a170 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
1a180 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
1a190 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
1a1a0 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
1a1b0 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
1a1c0 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
1a1d0 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
1a1e0 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
1a1f0 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
1a200 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
1a210 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
1a220 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1a230 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
1a240 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
1a250 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
1a260 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
1a270 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
1a280 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  he .** feature i
1a290 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
1a2a0 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
1a2b0 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
1a2c0 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
1a2d0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1a2e0 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
1a2f0 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
1a300 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
1a310 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
1a320 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
1a330 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
1a340 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
1a350 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
1a360 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
1a370 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
1a380 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
1a390 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
1a3a0 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1a3b0 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
1a3c0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
1a3d0 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
1a3e0 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
1a3f0 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
1a400 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
1a410 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
1a420 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
1a430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1a440 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1a450 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
1a460 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
1a470 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
1a480 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
1a490 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
1a4a0 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
1a4b0 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
1a4c0 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
1a4d0 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
1a4e0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
1a4f0 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
1a500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a510 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
1a520 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
1a530 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
1a540 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
1a550 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
1a560 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
1a570 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
1a580 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
1a590 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
1a5a0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1a5b0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
1a5c0 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
1a5d0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
1a5e0 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
1a5f0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1a600 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
1a610 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
1a620 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
1a630 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
1a640 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
1a650 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1a660 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1a670 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e  () */.  u8 okCon
1a680 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20  stFactor;    /* 
1a690 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74  OK to factor out
1a6a0 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
1a6b0 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
1a6c0 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
1a6d0 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
1a6e0 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
1a6f0 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
1a700 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1a710 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
1a720 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1a730 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
1a740 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
1a750 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
1a760 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1a770 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1a780 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
1a790 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
1a7a0 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
1a7b0 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
1a7c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a7d0 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
1a7e0 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
1a7f0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
1a800 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a810 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
1a820 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
1a830 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74  ar */.  int nSet
1a840 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a850 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75  Number of sets u
1a860 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1a870 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20  int nOnce;      
1a880 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a890 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75  f OP_Once instru
1a8a0 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f  ctions so far */
1a8b0 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b  .  int nOpAlloc;
1a8c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a8d0 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  r of slots alloc
1a8e0 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1a8f0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69  p[] */.  int iFi
1a900 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a  xedOp;        /*
1a910 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20   Never back out 
1a920 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70  opcodes iFixedOp
1a930 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f  -1 or earlier */
1a940 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
1a950 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1a960 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
1a970 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
1a980 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
1a990 6e 74 20 69 50 61 72 74 49 64 78 54 61 62 3b 20  nt iPartIdxTab; 
1a9a0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72      /* Table cor
1a9b0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20  responding to a 
1a9c0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f  partial index */
1a9d0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
1a9e0 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
1a9f0 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
1aa00 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
1aa10 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
1aa20 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
1aa30 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
1aa40 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
1aa50 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
1aa60 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
1aa70 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
1aa80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1aa90 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
1aaa0 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
1aab0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
1aac0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
1aad0 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  bels */.  struct
1aae0 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
1aaf0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
1ab00 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1ab10 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
1ab20 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e  .    i16 iColumn
1ab30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1ab40 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
1ab50 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
1ab60 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
1ab70 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
1ab80 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
1ab90 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
1aba0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
1abb0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
1abc0 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
1abd0 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1abf0 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
1ac00 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
1ac10 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
1ac20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
1ac30 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
1ac40 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
1ac50 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
1ac60 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
1ac70 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
1ac80 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
1ac90 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
1aca0 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
1acb0 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c  entry */.  ExprL
1acc0 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b  ist *pConstExpr;
1acd0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1ace0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b  essions */.  Tok
1acf0 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
1ad00 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
1ad10 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
1ad20 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
1ad30 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  ed */.  yDbMask 
1ad40 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20  writeMask;   /* 
1ad50 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
1ad60 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
1ad70 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
1ad80 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65    yDbMask cookie
1ad90 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73  Mask;  /* Bitmas
1ada0 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
1adb0 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
1adc0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
1add0 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
1ade0 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
1adf0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
1ae00 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
1ae10 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
1ae20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1ae30 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
1ae40 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
1ae50 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
1ae60 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
1ae70 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1ae80 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
1ae90 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
1aea0 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
1aeb0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
1aec0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
1aed0 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
1aee0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
1aef0 6d 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  m */.#ifndef SQL
1af00 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1af10 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1af20 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1af30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1af40 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1af50 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1af60 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1af70 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1af80 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1af90 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1afa0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1afb0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1afc0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1afd0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1afe0 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  unters */..  /* 
1aff0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
1b000 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
1b010 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
1b020 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
1b030 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
1b040 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
1b050 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
1b060 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
1b070 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
1b080 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
1b090 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
1b0a0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
1b0b0 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
1b0c0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1b0d0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1b0e0 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
1b0f0 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61  TABLE */.  int a
1b100 64 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20 20  ddrSkipPK;      
1b110 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69 6e  /* Address of in
1b120 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69  struction to ski
1b130 70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  p PRIMARY KEY in
1b140 64 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  dex */.  u32 nQu
1b150 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1b160 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1b170 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1b180 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1b190 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1b1a0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1b1b0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1b1c0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1b1d0 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1b1e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1b1f0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1b200 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1b210 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1b220 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1b230 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1b240 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1b250 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1b260 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1b270 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1b280 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1b290 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1b2a0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1b2b0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1b2c0 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1b2d0 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1b2e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b2f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1b320 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1b330 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1b340 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1b350 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1b360 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1b370 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1b380 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1b390 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1b3a0 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1b3b0 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1b3c0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1b3d0 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1b3e0 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1b3f0 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1b400 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1b410 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1b420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b460 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e  ******/..  int n
1b470 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1b480 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b490 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1b4a0 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1b4b0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b4c0 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1b4d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b4e0 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1b4f0 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1b500 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1b510 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1b520 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1b530 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1b540 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65  KEY */.  u8 bFre
1b550 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  eWith;          
1b560 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57     /* True if pW
1b570 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72  ith should be fr
1b580 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72 20  eed with parser 
1b590 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b5b0 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
1b5c0 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
1b5d0 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
1b5e0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1b5f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1b600 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
1b610 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
1b620 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
1b630 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
1b640 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
1b650 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
1b660 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b670 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
1b680 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
1b690 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c  #endif.  int nAl
1b6a0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
1b6b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b6c0 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73  aliased result s
1b6d0 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1b6e0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
1b6f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
1b700 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
1b710 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
1b720 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
1b730 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1b740 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
1b750 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
1b760 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
1b770 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
1b780 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
1b790 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
1b7a0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
1b7b0 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
1b7c0 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
1b7d0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1b7e0 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a  .#endif.  char *
1b7f0 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
1b800 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20      /* Pointers 
1b810 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61  to names of para
1b820 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  meters */.  Vdbe
1b830 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
1b840 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
1b850 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
1b860 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
1b870 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
1b880 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
1b890 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
1b8a0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
1b8b0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
1b8c0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
1b8d0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
1b8e0 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
1b8f0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
1b900 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1b910 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
1b920 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
1b930 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
1b940 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
1b950 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
1b960 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1b970 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
1b980 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
1b990 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
1b9a0 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  acks */.  Token 
1b9b0 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
1b9c0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
1b9d0 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
1b9e0 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
1b9f0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73   */.  Token sLas
1ba00 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  tToken;         
1ba10 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
1ba20 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  n parsed */.#ifn
1ba30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ba40 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
1ba50 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
1ba60 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1ba70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
1ba80 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
1ba90 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
1baa0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
1bab0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
1bac0 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
1bad0 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
1bae0 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
1baf0 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
1bb00 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
1bb10 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
1bb20 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
1bb30 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
1bb40 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
1bb50 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
1bb60 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
1bb70 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
1bb80 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
1bb90 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
1bba0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1bbb0 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  L */.};../*.** R
1bbc0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
1bbd0 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
1bbe0 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
1bbf0 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
1bc00 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1bc10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1bc20 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
1bc30 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
1bc40 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
1bc50 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
1bc60 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
1bc70 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
1bc80 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1bc90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1bca0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
1bcb0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
1bcc0 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
1bcd0 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
1bce0 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
1bcf0 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
1bd00 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
1bd10 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
1bd20 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
1bd30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
1bd40 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
1bd50 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
1bd60 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
1bd70 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
1bd80 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1bd90 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
1bda0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
1bdb0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
1bdc0 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
1bdd0 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
1bde0 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  codes..*/.#defin
1bdf0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1be00 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1be10 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1be20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
1be30 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1be40 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1be50 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1be60 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1be70 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1be80 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1be90 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1bea0 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1beb0 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1bec0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1bed0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1bee0 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1bef0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1bf00 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1bf10 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1bf20 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1bf30 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1bf40 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1bf50 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1bf60 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
1bf70 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
1bf80 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
1bf90 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
1bfa0 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  P_Column */.#def
1bfb0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
1bfc0 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
1bfd0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1bfe0 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
1bff0 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
1c000 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
1c010 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
1c020 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1c030 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
1c040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1c050 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1c060 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
1c070 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
1c080 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
1c090 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c0a0 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
1c0b0 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x02    /* P2 to 
1c0c0 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
1c0d0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
1c0e0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1c0f0 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
1c100 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
1c110 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
1c120 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
1c130 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
1c140 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
1c150 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1c160 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
1c170 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
1c180 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
1c190 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
1c1a0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
1c1b0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
1c1c0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
1c1d0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
1c1e0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
1c1f0 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
1c200 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
1c210 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
1c220 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
1c230 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
1c240 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
1c250 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
1c260 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
1c270 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
1c280 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1c290 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
1c2a0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
1c2b0 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
1c2c0 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
1c2d0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1c2e0 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
1c2f0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1c300 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
1c310 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
1c320 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
1c330 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
1c340 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
1c350 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
1c360 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
1c370 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1c380 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
1c390 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1c3a0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
1c3b0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1c3c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
1c3d0 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1c3e0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
1c3f0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
1c400 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
1c410 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
1c420 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
1c430 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c450 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
1c460 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
1c470 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
1c480 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
1c490 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
1c4a0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c4c0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1c4d0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1c4e0 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
1c4f0 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c510 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
1c520 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
1c530 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
1c540 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
1c550 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
1c560 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
1c570 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
1c580 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
1c590 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
1c5a0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
1c5b0 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
1c5c0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
1c5d0 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
1c600 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
1c610 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1c620 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
1c630 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1c640 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
1c650 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
1c660 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
1c670 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1c680 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
1c690 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
1c6a0 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
1c6b0 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
1c6c0 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
1c6d0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
1c6e0 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
1c6f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1c700 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
1c710 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
1c720 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
1c730 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
1c740 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
1c750 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
1c760 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1c770 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
1c780 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
1c790 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
1c7a0 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
1c7b0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
1c7c0 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
1c7d0 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
1c7e0 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
1c7f0 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
1c800 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
1c810 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
1c820 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
1c830 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
1c840 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
1c850 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
1c860 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
1c870 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
1c880 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
1c890 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
1c8a0 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
1c8b0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
1c8c0 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
1c8d0 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
1c8e0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1c8f0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
1c900 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
1c910 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
1c920 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
1c930 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
1c940 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
1c950 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
1c960 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
1c970 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
1c980 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
1c990 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1c9a0 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
1c9b0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
1c9c0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
1c9d0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1c9e0 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
1c9f0 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
1ca00 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
1ca10 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
1ca20 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
1ca30 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
1ca40 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
1ca50 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
1ca60 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
1ca70 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1ca80 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
1ca90 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
1caa0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
1cab0 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
1cac0 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
1cad0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
1cae0 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
1caf0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1cb00 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1cb10 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
1cb20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1cb30 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1cb40 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
1cb50 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
1cb60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
1cb70 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1cb80 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
1cb90 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
1cba0 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
1cbb0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
1cbc0 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
1cbd0 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
1cbe0 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1cbf0 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
1cc00 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1cc10 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1cc20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1cc30 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
1cc40 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
1cc50 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
1cc60 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
1cc70 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1cc80 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
1cc90 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
1cca0 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
1ccb0 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
1ccc0 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
1ccd0 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
1cce0 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
1ccf0 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
1cd00 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
1cd10 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
1cd20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1cd30 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1cd40 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1cd50 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
1cd60 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
1cd70 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1cd80 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1cd90 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
1cda0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1cdb0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1cdc0 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1cdd0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
1cde0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1cdf0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1ce00 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1ce10 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1ce20 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1ce30 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e   update rows of.
1ce40 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1ce50 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1ce60 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1ce70 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1ce80 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1ce90 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1cea0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1ceb0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1cec0 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1ced0 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1cee0 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1cef0 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1cf10 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1cf20 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1cf30 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1cf40 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1cf50 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1cf60 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1cf70 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1cf80 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1cf90 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1cfa0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1cfb0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1cfc0 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1cfd0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1cfe0 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1cff0 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1d000 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1d010 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1d020 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1d030 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1d040 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1d050 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1d060 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20  statment or RHS 
1d070 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  of INSERT INTO .
1d080 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  . SELECT ... */.
1d090 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
1d0a0 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1d0b0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1d0c0 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1d0d0 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1d0e0 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1d0f0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d100 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1d110 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1d120 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1d130 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1d140 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a  se for UPDATE. *
1d150 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
1d160 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
1d170 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
1d180 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
1d190 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
1d1a0 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
1d1b0 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
1d1c0 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
1d1d0 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
1d1e0 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
1d1f0 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
1d200 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
1d210 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1d220 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1d230 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
1d240 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
1d250 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
1d260 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
1d270 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
1d280 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
1d290 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
1d2a0 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
1d2b0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
1d2c0 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
1d2d0 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
1d2e0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1d2f0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
1d300 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
1d310 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
1d320 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
1d330 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1d340 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
1d350 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
1d360 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
1d370 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
1d380 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
1d390 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
1d3a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1d3b0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1d3c0 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1d3d0 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1d3e0 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1d3f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1d400 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1d410 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1d420 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1d430 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1d440 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1d450 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1d460 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1d470 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1d480 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1d490 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1d4a0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1d4b0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1d4c0 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1d4d0 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1d4e0 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1d4f0 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1d500 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1d510 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1d520 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1d530 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1d540 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1d550 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1d560 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1d570 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1d580 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1d590 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1d5a0 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1d5b0 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1d5c0 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1d5d0 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1d5e0 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1d5f0 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1d600 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1d610 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1d620 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1d630 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1d640 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1d650 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1d660 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1d670 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1d680 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1d690 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ed string length
1d6a0 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61   */.  u8   useMa
1d6b0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a  lloc;      /* 0:
1d6c0 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74   none,  1: sqlit
1d6d0 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20  e3DbMalloc,  2: 
1d6e0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a  sqlite3_malloc *
1d6f0 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f  /.  u8   accErro
1d700 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41  r;       /* STRA
1d710 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54  CCUM_NOMEM or ST
1d720 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f  RACCUM_TOOBIG */
1d730 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
1d740 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
1d750 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1d760 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a  TOOBIG  2../*.**
1d770 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1d780 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1d790 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1d7a0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1d7b0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1d7c0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1d7d0 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1d7e0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1d7f0 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1d800 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1d810 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1d820 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1d830 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1d840 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1d850 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1d860 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1d870 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1d880 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1d890 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1d8a0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1d8b0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1d8c0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1d8d0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1d8e0 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1d8f0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1d900 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1d910 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1d920 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1d930 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1d940 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1d950 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1d960 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1d970 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1d980 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1d990 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1d9a0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1d9b0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1d9e0 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1d9f0 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1da00 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1da10 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1da20 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1da30 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1da40 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1da60 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1da70 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1da80 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1dab0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1dac0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1dad0 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1db00 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1db10 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1db20 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1db50 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1db60 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
1db90 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
1dba0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
1dbb0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1dbc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1dbd0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1dbe0 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
1dbf0 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1dc20 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
1dc30 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  unt */.  sqlite3
1dc40 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
1dc50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
1dc60 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
1dc70 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
1dc80 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1dc90 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
1dca0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
1dcb0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
1dcc0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1dcd0 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
1dce0 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
1dcf0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
1dd00 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
1dd10 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
1dd20 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1dd30 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
1dd40 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
1dd50 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1dd80 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
1dd90 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ddb0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
1ddc0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
1ddd0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
1dde0 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
1ddf0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
1de00 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
1de10 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
1de20 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
1de30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1de40 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
1de50 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
1de60 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
1de90 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
1dea0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1deb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1dec0 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
1ded0 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
1dee0 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
1df10 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
1df20 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
1df50 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
1df60 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1df90 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
1dfa0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1dfd0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
1dfe0 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
1dff0 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
1e000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1e010 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
1e020 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
1e030 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
1e040 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
1e050 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
1e060 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
1e070 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
1e080 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1e090 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1e0a0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1e0b0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1e0c0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1e0d0 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1e0e0 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1e0f0 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1e120 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1e130 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1e140 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1e150 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1e160 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e170 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1e180 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1e190 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1e1a0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1e1b0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e1c0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1e1d0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1e1e0 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1e1f0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1e200 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1e210 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1e220 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1e230 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1e260 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1e270 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
1e280 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1e290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e2a0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1e2b0 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1e2c0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1e2d0 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1e2e0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1e2f0 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1e300 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
1e310 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1e320 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1e330 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1e340 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1e350 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e370 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1e380 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1e390 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1e3a0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1e3b0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1e3c0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1e3d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1e3e0 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1e3f0 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
1e400 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
1e410 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
1e420 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
1e430 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
1e440 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
1e450 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
1e460 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
1e470 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
1e480 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
1e490 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
1e4a0 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
1e4b0 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
1e4c0 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
1e4d0 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
1e4e0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
1e4f0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
1e500 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
1e510 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
1e540 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
1e550 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e560 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
1e570 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
1e580 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
1e590 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
1e5a0 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
1e5b0 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
1e5c0 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
1e5d0 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
1e5e0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
1e5f0 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
1e600 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
1e610 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
1e620 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
1e630 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
1e640 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
1e650 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
1e660 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
1e670 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
1e680 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
1e690 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
1e6a0 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
1e6b0 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
1e6c0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1e6d0 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
1e6e0 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
1e6f0 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
1e700 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
1e710 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
1e720 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
1e730 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
1e740 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
1e750 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
1e760 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
1e770 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
1e780 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
1e790 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
1e7a0 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
1e7b0 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
1e7c0 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
1e7d0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
1e7e0 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
1e7f0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1e800 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
1e810 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
1e820 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
1e830 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1e840 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
1e850 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
1e860 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
1e870 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
1e880 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1e890 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1e8a0 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1e8b0 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1e8c0 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1e8d0 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1e8e0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1e8f0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1e900 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1e910 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1e920 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1e930 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1e940 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1e950 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
1e960 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
1e970 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
1e980 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
1e990 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
1e9a0 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
1e9b0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
1e9e0 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
1e9f0 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ea20 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
1ea30 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea60 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
1ea70 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
1ea80 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1ea90 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1eab0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
1eac0 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
1eb00 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
1eb10 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
1eb40 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1eb50 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
1eb60 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
1eb70 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
1eb80 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
1eb90 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  s */.  } u;.};..
1eba0 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
1ebb0 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
1ebc0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
1ebd0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
1ebe0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1ebf0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
1ec00 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1ec10 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1ec20 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
1ec30 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1ec40 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
1ec50 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1ec60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1ec70 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
1ec80 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1ec90 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
1eca0 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
1ecb0 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
1ecc0 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
1ecd0 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
1ece0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
1ecf0 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
1ed00 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
1ed10 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
1ed20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
1ed30 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
1ed40 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
1ed50 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
1ed60 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
1ed70 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
1ed80 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
1ed90 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
1eda0 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
1edb0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1edc0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
1edd0 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
1ede0 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
1edf0 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
1ee00 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
1ee10 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
1ee20 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
1ee30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
1ee40 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ee70 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
1ee80 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
1ee90 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eeb0 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
1eec0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1eed0 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
1eee0 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
1eef0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
1ef00 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
1ef10 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
1ef20 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1ef30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ef40 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1ef50 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
1ef60 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
1ef90 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
1efa0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
1efb0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1efc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1efd0 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
1efe0 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
1eff0 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
1f000 20 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20 20   *zErr;         
1f010 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
1f020 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
1f030 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
1f040 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
1f050 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
1f060 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
1f070 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
1f080 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1f090 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
1f0a0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
1f0b0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
1f0c0 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
1f0d0 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
1f0e0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
1f0f0 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
1f120 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f140 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1f150 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
1f160 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
1f170 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
1f180 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1f1c0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
1f1d0 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
1f1e0 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
1f1f0 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
1f200 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
1f210 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
1f220 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
1f230 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
1f240 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
1f250 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
1f260 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
1f270 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
1f280 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
1f290 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
1f2a0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
1f2b0 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
1f2c0 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
1f2d0 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
1f2e0 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
1f2f0 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
1f300 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
1f310 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
1f320 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1f330 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1f340 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1f350 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
1f360 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
1f370 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
1f380 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
1f390 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1f3a0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
1f3b0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1f3c0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1f3d0 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
1f3e0 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
1f3f0 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
1f400 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
1f410 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
1f420 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
1f430 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
1f440 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
1f450 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1f460 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
1f470 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
1f480 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a  on we also all.*
1f490 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
1f4a0 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
1f4b0 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
1f4c0 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  isse for SQLITE_
1f4d0 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
1f4e0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1f4f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
1f500 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1f510 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
1f520 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f530 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64  ENABLE_FTS3.#end
1f540 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
1f550 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
1f560 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
1f570 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
1f580 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
1f590 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
1f5a0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
1f5b0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
1f5c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
1f5d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
1f5e0 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
1f5f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1f600 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
1f610 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
1f620 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
1f630 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
1f640 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1f650 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1f660 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
1f670 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
1f680 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
1f690 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
1f6a0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
1f6b0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
1f6c0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
1f6d0 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
1f6e0 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
1f6f0 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
1f700 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
1f710 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
1f720 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1f730 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
1f740 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1f750 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
1f760 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1f770 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1f780 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
1f790 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
1f7a0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1f7b0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1f7c0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
1f7d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f7e0 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
1f7f0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1f800 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1f810 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
1f820 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
1f830 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1f840 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1f850 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
1f860 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1f870 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
1f880 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1f890 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1f8a0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
1f8b0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
1f8c0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
1f8d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1f8e0 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
1f8f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1f900 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
1f910 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
1f920 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f930 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
1f940 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1f950 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
1f960 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1f970 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1f980 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
1f990 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
1f9a0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1f9b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1f9c0 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
1f9d0 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
1f9e0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1f9f0 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
1fa00 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
1fa10 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1fa20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1fa30 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
1fa40 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1fa50 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1fa60 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
1fa70 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
1fa80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1fa90 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1faa0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
1fab0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
1fac0 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
1fad0 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
1fae0 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
1faf0 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  types.*/.#define
1fb00 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20   sqlite3StrICmp 
1fb10 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a  sqlite3_stricmp.
1fb20 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
1fb30 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
1fb40 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
1fb50 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
1fb60 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
1fb70 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
1fb80 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
1fb90 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
1fba0 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
1fbb0 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  te3Malloc(int);.
1fbc0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1fbd0 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f  locZero(int);.vo
1fbe0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
1fbf0 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
1fc00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1fc10 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
1fc20 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1fc30 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
1fc40 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
1fc50 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
1fc60 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1fc70 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
1fc80 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
1fc90 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
1fca0 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74  alloc(void*, int
1fcb0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1fcc0 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
1fcd0 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
1fce0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1fcf0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
1fd00 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
1fd10 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1fd20 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
1fd30 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
1fd40 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
1fd50 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
1fd60 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
1fd70 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
1fd80 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
1fd90 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
1fda0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1fdb0 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
1fdc0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
1fdd0 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
1fde0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1fdf0 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
1fe00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
1fe10 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
1fe20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1fe30 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
1fe40 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
1fe50 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
1fe60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  ;.int sqlite3Hea
1fe70 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
1fe80 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
1fe90 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
1fea0 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
1feb0 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
1fec0 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
1fed0 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
1fee0 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
1fef0 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
1ff00 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
1ff10 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
1ff20 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
1ff30 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
1ff40 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
1ff50 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
1ff60 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
1ff70 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
1ff80 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
1ff90 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
1ffa0 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
1ffb0 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
1ffc0 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
1ffd0 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
1ffe0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fff0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
20000 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
20010 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20020 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
20030 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
20040 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
20050 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20060 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
20070 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
20080 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
20090 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
200a0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
200b0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
200c0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
200d0 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
200e0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
200f0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
20100 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
20110 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
20120 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
20130 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
20140 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
20150 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
20160 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
20170 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
20180 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
20190 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
201a0 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
201b0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
201c0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
201d0 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
201e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
201f0 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
20200 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
20210 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
20220 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
20230 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
20240 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20250 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
20260 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
20270 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
20280 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
20290 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
202a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
202b0 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
202c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
202d0 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
202e0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  f..int sqlite3St
202f0 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
20300 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
20310 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b  usAdd(int, int);
20320 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
20330 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29  tusSet(int, int)
20340 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
20350 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
20360 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
20370 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
20380 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20390 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
203a0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
203b0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
203c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
203d0 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
203e0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
203f0 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
20400 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
20410 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
20420 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
20430 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
20440 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
20450 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
20460 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
20470 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
20480 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
20490 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
204a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
204b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
204c0 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
204d0 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
204e0 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
204f0 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
20500 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23   values */.};..#
20510 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
20520 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
20530 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  01.#define SQLIT
20540 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
20550 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69    0x02.void sqli
20560 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
20570 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
20580 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
20590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
205a0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
205b0 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
205c0 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
205d0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
205e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
205f0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
20600 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
20610 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
20620 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
20630 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41  .char *sqlite3MA
20640 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c  ppendf(sqlite3*,
20650 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
20660 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69  *,...);.#if defi
20670 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
20680 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
20690 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
206a0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
206b0 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
206c0 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
206d0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
206e0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
206f0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
20700 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
20710 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74  ;.#endif../* Out
20720 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20 66  put formatting f
20730 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  or SQLITE_TESTCT
20740 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69  RL_EXPLAIN */.#i
20750 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
20760 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50  _ENABLE_TREE_EXP
20770 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c  LAIN).  void sql
20780 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e  ite3ExplainBegin
20790 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
207a0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 72  sqlite3ExplainPr
207b0 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73  intf(Vdbe*, cons
207c0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20  t char*, ...);. 
207d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
207e0 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20  lainNL(Vdbe*);. 
207f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
20800 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29 3b  lainPush(Vdbe*);
20810 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
20820 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a 29  xplainPop(Vdbe*)
20830 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20840 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56 64  ExplainFinish(Vd
20850 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
20860 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63  ite3ExplainSelec
20870 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a  t(Vdbe*, Select*
20880 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
20890 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64 62  3ExplainExpr(Vdb
208a0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  e*, Expr*);.  vo
208b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
208c0 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a 2c  nExprList(Vdbe*,
208d0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63   ExprList*);.  c
208e0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
208f0 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
20900 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a  n(Vdbe*);.#else.
20910 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20920 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a  ExplainBegin(X).
20930 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20940 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c  ExplainSelect(A,
20950 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
20960 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 41  te3ExplainExpr(A
20970 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
20980 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
20990 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ist(A,B).# defin
209a0 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
209b0 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66 69  Finish(X).# defi
209c0 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ne sqlite3VdbeEx
209d0 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23  planation(X) 0.#
209e0 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
209f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
20a00 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
20a10 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
20a20 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
20a30 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
20a40 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
20a50 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  .);.int sqlite3D
20a60 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69  equote(char*);.i
20a70 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
20a80 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
20a90 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
20aa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
20ab0 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
20ac0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
20ad0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
20ae0 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
20af0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
20b00 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
20b10 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
20b20 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
20b30 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
20b40 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
20b50 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
20b60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20b70 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
20b80 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
20b90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
20ba0 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
20bb0 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Parse*);.Expr *s
20bc0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
20bd0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
20be0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
20bf0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
20c00 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
20c10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
20c20 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
20c30 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
20c40 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
20c50 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
20c60 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
20c70 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
20c80 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
20c90 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
20ca0 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
20cb0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
20cc0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
20cd0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
20ce0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
20cf0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
20d00 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
20d10 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
20d20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
20d30 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
20d40 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
20d50 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
20d60 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
20d70 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
20d80 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
20d90 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
20da0 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
20db0 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
20dc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20dd0 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
20de0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
20df0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
20e00 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
20e10 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
20e20 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
20e30 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
20e40 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
20e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
20e60 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
20e70 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
20e80 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
20e90 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
20ea0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
20eb0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
20ec0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
20ed0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
20ee0 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
20ef0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
20f00 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
20f10 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
20f20 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
20f30 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
20f40 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
20f50 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  3BeginParse(Pars
20f60 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
20f70 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
20f80 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
20f90 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  e3*);.Table *sql
20fa0 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
20fb0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
20fc0 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
20fd0 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
20fe0 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
20ff0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
21000 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
21010 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
21020 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
21030 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
21040 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
21050 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
21060 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
21070 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  int,int,int);.vo
21080 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
21090 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
210a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
210b0 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
210c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
210d0 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
210e0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
210f0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
21100 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21110 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
21120 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
21130 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21140 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50  3AddColumnType(P
21150 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
21160 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
21170 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
21180 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
21190 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
211a0 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
211b0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
211c0 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
211d0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
211e0 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
211f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
21200 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
21210 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
21220 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
21230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21240 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
21250 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
21260 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
21270 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
21280 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
21290 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
212a0 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
212b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
212c0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
212d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
212e0 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
212f0 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
21300 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
21310 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
21320 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
21330 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
21340 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
21350 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
21360 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
21370 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
21380 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
21390 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
213a0 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
213b0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
213c0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
213d0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
213e0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
213f0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
21400 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
21410 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
21420 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
21430 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
21440 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
21450 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
21460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
21470 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
21480 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21490 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
214a0 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
214b0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
214c0 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
214d0 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
214e0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
214f0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
21500 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
21510 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
21520 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
21530 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  oken*,Select*,in
21540 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
21550 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21560 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
21570 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21580 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
21590 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
215a0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
215b0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
215c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
215d0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
215e0 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
215f0 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
21600 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
21610 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
21620 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
21630 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
21640 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
21650 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
21660 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
21670 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
21680 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
21690 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
216a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
216b0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
216c0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
216d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
216e0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
216f0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
21700 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
21710 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
21720 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21730 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
21740 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
21750 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
21760 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
21770 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
21780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
21790 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
217a0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
217b0 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
217c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
217d0 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
217e0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
217f0 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
21800 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
21810 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
21820 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
21830 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
21840 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
21850 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
21860 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
21870 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
21880 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
21890 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
218a0 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
218b0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
218c0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
218d0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
218e0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
218f0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
21900 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
21910 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
21920 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
21930 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
21940 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
21980 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
21990 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
219a0 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
219b0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
219c0 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
219d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
219e0 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
219f0 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
21a00 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
21a10 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
21a20 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
21a30 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
21a40 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
21a50 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
21a60 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
21a70 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
21a80 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
21a90 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
21aa0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
21ab0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
21ac0 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
21ad0 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
21ae0 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
21af0 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
21b00 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
21b10 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
21b20 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
21b30 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
21b40 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
21b50 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
21b70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
21b80 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
21b90 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
21ba0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
21bb0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
21bc0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
21bd0 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
21be0 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
21bf0 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
21c00 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
21c10 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
21c20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21c30 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
21c40 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
21c50 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
21c60 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
21c70 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
21c80 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
21c90 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
21ca0 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
21cb0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
21cc0 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
21cd0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
21ce0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21cf0 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
21d00 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
21d10 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
21d20 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
21d30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
21d40 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
21d50 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
21d60 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
21d70 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
21d80 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
21d90 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
21da0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
21db0 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
21dc0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21dd0 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
21de0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
21df0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
21e00 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
21e10 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
21e20 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
21e30 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
21e40 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
21e50 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
21e60 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
21e70 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
21e80 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21e90 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
21ea0 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
21eb0 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
21ec0 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
21ed0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
21ee0 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
21ef0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
21f00 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
21f10 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
21f20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
21f30 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
21f40 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
21f50 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
21f60 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
21f70 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
21f80 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
21f90 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
21fa0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
21fb0 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
21fc0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
21fd0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
21fe0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
21ff0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
22000 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
22010 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
22020 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
22030 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
22040 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
22050 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22060 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
22070 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22080 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22090 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
220a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
220b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
220c0 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
220d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
220e0 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
220f0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
22100 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
22110 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
22120 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22130 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
22140 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
22150 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
22160 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
22170 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
22180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22190 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
221a0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
221b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
221c0 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
221d0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
221e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
221f0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
22200 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
22210 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
22220 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
22230 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
22240 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22250 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
22260 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
22270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22280 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
22290 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
222a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
222b0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
222c0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
222d0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
222e0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
222f0 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
22300 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
22310 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
22320 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
22330 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
22340 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
22350 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
22360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22370 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
22380 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
22390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
223a0 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
223b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
223c0 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
223d0 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
223e0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
223f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
22400 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
22410 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
22420 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73  ,int isView,cons
22430 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
22440 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
22450 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
22460 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20  Item(Parse*,int 
22470 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72  isView,struct Sr
22480 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
22490 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
224a0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
224b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
224c0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
224d0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
224e0 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
224f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
22500 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
22510 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
22520 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
22530 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
22540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
22550 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
22560 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
22570 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
22580 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
22590 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
225a0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
225b0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
225c0 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72  ExprCompare(Expr
225d0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
225e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
225f0 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
22600 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
22610 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22620 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
22630 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  r(Expr*, Expr*, 
22640 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22650 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
22660 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
22670 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
22680 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
22690 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
226a0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
226b0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
226c0 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
226d0 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
226e0 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
226f0 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
22700 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22710 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
22720 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
22730 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
22740 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
22750 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
22760 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
22770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
22780 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
22790 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
227a0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
227b0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
227c0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
227d0 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
227e0 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
227f0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
22800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22810 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
22820 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22830 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
22840 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
22850 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22860 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
22870 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
22880 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
22890 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
228a0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
228b0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
228c0 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
228d0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
228e0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
228f0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
22900 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
22910 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
22920 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22930 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
22940 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
22950 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
22960 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
22970 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22980 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
22990 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
229a0 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
229b0 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
229c0 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
229d0 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
229e0 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
229f0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22a00 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
22a10 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ete(Parse*,Table
22a20 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
22a30 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
22a40 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
22a50 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
22a60 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
22a70 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22a80 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  t, int*);.int sq
22a90 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
22aa0 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
22ab0 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
22ac0 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
22ad0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22ae0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
22af0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
22b00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22b10 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
22b20 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
22b30 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
22b40 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
22b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
22b90 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
22ba0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
22bb0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  nt,int,int,int*,
22bc0 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
22bd0 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
22be0 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
22bf0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22c00 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
22c10 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
22c20 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
22c30 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
22c40 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22c50 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
22c60 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
22c70 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
22c80 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22c90 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
22ca0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
22cb0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
22cc0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
22cd0 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
22ce0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
22cf0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
22d00 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
22d10 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
22d20 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
22d30 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
22d40 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
22d50 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
22d60 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
22d70 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
22d80 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
22d90 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
22da0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
22db0 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
22dc0 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
22dd0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
22de0 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
22df0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
22e00 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
22e10 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ect*,int);.void 
22e20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e  sqlite3FuncDefIn
22e30 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68  sert(FuncDefHash
22e40 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75  *, FuncDef*);.Fu
22e50 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
22e60 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
22e70 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
22e80 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  int,int,u8,u8);.
22e90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
22ea0 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
22eb0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
22ec0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
22ed0 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
22ee0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
22ef0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
22f00 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  rGlobalFunctions
22f10 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
22f20 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
22f30 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
22f40 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
22f50 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74  ckSickOrOk(sqlit
22f60 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
22f70 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50  e3ChangeCookie(P
22f80 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69  arse*, int);..#i
22f90 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
22fa0 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20  E_OMIT_VIEW) && 
22fb0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22fc0 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f  OMIT_TRIGGER).vo
22fd0 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69  id sqlite3Materi
22fe0 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a  alizeView(Parse*
22ff0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
23000 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23   int);.#endif..#
23010 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23020 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69  IT_TRIGGER.  voi
23030 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
23040 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f  igger(Parse*, To
23050 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
23060 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c  int,IdList*,SrcL
23070 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23090 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29   Expr*,int, int)
230a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
230b0 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61  FinishTrigger(Pa
230c0 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65  rse*, TriggerSte
230d0 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76  p*, Token*);.  v
230e0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
230f0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53  rigger(Parse*, S
23100 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  rcList*, int);. 
23110 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
23120 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73  pTriggerPtr(Pars
23130 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  e*, Trigger*);. 
23140 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
23150 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50  3TriggersExist(P
23160 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20  arse *, Table*, 
23170 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
23180 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54  int *pMask);.  T
23190 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
231a0 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65  riggerList(Parse
231b0 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20   *, Table *);.  
231c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
231d0 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65  RowTrigger(Parse
231e0 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  *, Trigger *, in
231f0 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
23200 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20  t, Table *,.    
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74          int, int
23230 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
23240 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
23250 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65  ggerDirect(Parse
23260 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54   *, Trigger *, T
23270 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
23280 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
23290 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72  qliteViewTrigger
232a0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
232b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78  , Expr*, int, Ex
232c0 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64  prList*);.  void
232d0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
232e0 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65  iggerStep(sqlite
232f0 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  3*, TriggerStep*
23300 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
23310 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
23320 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74  SelectStep(sqlit
23330 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e3*,Select*);.  
23340 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
23350 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
23360 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
23370 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
233b0 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
233c0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
233d0 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
233e0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
233f0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
23400 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
23410 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
23420 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
23430 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
23440 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
23450 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
23460 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
23470 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
23480 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
23490 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
234a0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
234b0 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
234c0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
234d0 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
234e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
234f0 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
23500 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23510 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
23520 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
23530 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
23540 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a  el : (p)).#else.
23550 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23560 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
23570 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
23580 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
23590 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
235a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
235b0 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
235c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
235d0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
235e0 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
235f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23600 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
23610 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
23620 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23630 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
23640 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
23650 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
23660 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
23670 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
23680 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
23690 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
236a0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
236b0 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
236c0 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
236d0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
236e0 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
236f0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
23700 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
23710 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
23720 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
23730 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
23740 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
23750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
23760 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
23770 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
23780 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
23790 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
237a0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
237b0 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
237c0 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
237d0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
237e0 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
237f0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
23800 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
23810 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
23820 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
23830 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
23840 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
23850 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
23860 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
23870 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
23880 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
23890 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
238a0 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
238b0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
238c0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
238d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
238e0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
238f0 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
23900 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
23910 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
23920 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
23930 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
23940 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
23950 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23960 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
23970 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
23980 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23990 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
239a0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
239b0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
239c0 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
239d0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
239e0 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
239f0 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
23a00 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
23a10 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
23a20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
23a30 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
23a40 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
23a50 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
23a60 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
23a70 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23a80 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
23a90 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
23aa0 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
23ab0 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
23ac0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23ad0 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
23ae0 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
23af0 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
23b00 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
23b10 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
23b20 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
23b30 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
23b40 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
23b50 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
23b60 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
23b70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
23b80 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
23b90 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
23ba0 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73  nt nChar);.int s
23bb0 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
23bc0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
23bd0 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
23be0 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
23bf0 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
23c00 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
23c10 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
23c20 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
23c30 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
23c40 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
23c50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23c60 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
23c70 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
23c80 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
23c90 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33  ndif.u64 sqlite3
23ca0 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45  LogEstToInt(LogE
23cb0 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  st);../*.** Rout
23cc0 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
23cd0 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
23ce0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
23cf0 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
23d00 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
23d10 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
23d20 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
23d30 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
23d40 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
23d50 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
23d60 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
23d70 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75  d char*, u64);.u
23d80 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
23d90 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
23da0 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
23db0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
23dc0 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
23dd0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
23de0 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
23df0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
23e00 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  v);../*.** The c
23e10 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f  ommon case is fo
23e20 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65  r a varint to be
23e30 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
23e40 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a   They following.
23e50 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65  ** macros handle
23e60 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
23e70 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65   without a proce
23e80 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74  dure call, but t
23e90 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  hen call.** the 
23ea0 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61  procedure for la
23eb0 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f  rger varints..*/
23ec0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
23ed0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
23ee0 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
23ef0 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
23f00 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
23f10 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
23f20 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
23f30 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
23f40 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
23f50 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
23f60 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
23f70 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
23f80 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
23f90 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64  int((A),(B))).#d
23fa0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
23fb0 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
23fc0 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
23fd0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
23fe0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
23ff0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
24000 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
24010 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  Vdbe *, Index *)
24020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
24030 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65  bleAffinity(Vdbe
24040 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
24050 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
24060 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
24070 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
24080 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
24090 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
240a0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
240b0 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
240c0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
240d0 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
240e0 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
240f0 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
24100 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
24110 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
24120 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
24130 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
24140 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
24150 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71  3ErrorWithMsg(sq
24160 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
24170 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
24180 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
24190 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
241a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
241b0 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
241c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
241d0 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
241e0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
241f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
24200 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
24210 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
24220 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
24230 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
24240 49 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74  ITE_TEST) .const
24250 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
24260 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64  rName(int);.#end
24270 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
24280 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
24290 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
242a0 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
242b0 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
242c0 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
242d0 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
242e0 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
242f0 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71  r*,int);.CollSeq
24300 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
24310 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
24320 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
24330 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
24340 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
24350 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
24360 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
24370 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
24380 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
24390 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
243a0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
243b0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
243c0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
243d0 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
243e0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
243f0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
24400 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
24410 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
24420 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
24430 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
24440 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
24450 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
24460 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
24470 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
24480 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
24490 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
244a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
244b0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
244c0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
244d0 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
244e0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
244f0 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
24500 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
24510 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
24520 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24530 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
24540 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
24550 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
24560 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
24570 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
24580 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
24590 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
245a0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
245b0 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
245c0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
245d0 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
245e0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
245f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
24600 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
24610 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
24620 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
24630 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
24640 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
24650 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
24680 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
24690 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
246a0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
246b0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
246c0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
246d0 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
246e0 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
246f0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
24700 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
24710 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
24720 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
24730 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
24740 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
24750 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
24760 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
24770 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
24780 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
24790 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
247a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
247b0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
247c0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
247d0 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
247e0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
247f0 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
24800 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
24810 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
24820 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
24830 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
24840 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
24850 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
24860 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
24870 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
24880 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
24890 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
248a0 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
248b0 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
248c0 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
248d0 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
248e0 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
248f0 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
24900 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24910 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
24920 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
24930 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
24940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
24950 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
24960 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
24970 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24980 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
24990 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
249a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
249b0 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
249c0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
249d0 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
249e0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
249f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
24a00 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
24a10 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
24a20 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
24a30 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
24a40 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
24a50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
24a60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24a70 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
24a80 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
24a90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
24aa0 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
24ab0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
24ac0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24ad0 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
24ae0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
24af0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
24b00 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
24b10 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
24b20 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
24b30 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
24b40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
24b50 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
24b60 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
24b70 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
24b80 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
24b90 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
24ba0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
24bb0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
24bc0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
24bd0 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
24be0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
24bf0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
24c00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
24c10 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
24c20 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
24c30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
24c40 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
24c50 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
24c60 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
24c70 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
24c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
24c90 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
24ca0 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
24cb0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24cc0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
24cd0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
24ce0 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
24cf0 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
24d00 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
24d10 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
24d20 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
24d30 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
24d40 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
24d50 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
24d60 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
24d70 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
24d80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
24d90 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
24da0 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
24db0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
24dc0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
24dd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
24de0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
24df0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
24e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
24e10 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
24e20 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
24e30 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
24e40 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
24e50 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
24e60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
24e70 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
24e80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24e90 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
24ea0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
24eb0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24ec0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
24ed0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
24ee0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
24ef0 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
24f00 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
24f10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24f20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
24f30 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
24f40 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
24f50 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
24f60 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
24f70 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
24f80 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
24f90 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
24fa0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
24fb0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
24fc0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
24fd0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
24fe0 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
24ff0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
25000 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
25010 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
25020 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
25030 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
25040 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
25050 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
25060 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
25070 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
25080 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
25090 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
250a0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
250b0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
250c0 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f  t, void *, .  vo
250d0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
250e0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
250f0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
25100 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
25110 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
25120 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
25130 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
25140 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
25150 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
25160 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69  pDestructor.);.i
25170 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
25180 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
25190 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
251a0 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
251b0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
251c0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
251d0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
251e0 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
251f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25200 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
25210 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
25220 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
25230 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
25240 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a  endAll(StrAccum*
25250 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
25260 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
25270 64 53 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a  dSpace(StrAccum*
25280 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c  ,int);.char *sql
25290 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
252a0 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  sh(StrAccum*);.v
252b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
252c0 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
252d0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
252e0 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28  3SelectDestInit(
252f0 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c  SelectDest*,int,
25300 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
25310 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45  te3CreateColumnE
25320 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53  xpr(sqlite3 *, S
25330 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69  rcList *, int, i
25340 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  nt);..void sqlit
25350 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28  e3BackupRestart(
25360 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
25370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25380 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69  ackupUpdate(sqli
25390 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67  te3_backup *, Pg
253a0 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b  no, const u8 *);
253b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
253c0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
253d0 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
253e0 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
253f0 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
25400 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
25410 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49  etValue(Parse*,I
25420 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
25430 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c  cord**,Expr*,u8,
25440 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
25450 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
25460 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
25470 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
25480 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
25490 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
254a0 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
254b0 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
254c0 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
254d0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
254e0 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
254f0 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
25500 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  **);.#endif../*.
25510 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
25520 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
25530 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
25540 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
25550 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
25560 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f  (*)(size_t));.vo
25570 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
25580 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
25590 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
255a0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
255b0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
255c0 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
255d0 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
255e0 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
255f0 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
25600 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
25610 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
25620 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
25630 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
25640 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25650 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
25660 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
25670 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
25680 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
25690 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
256a0 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
256b0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
256c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
256d0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
256e0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
256f0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
25700 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
25710 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
25720 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
25730 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
25740 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
25750 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
25760 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
25770 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
25780 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
25790 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
257a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
257b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
257c0 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
257d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
257e0 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
257f0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
25800 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
25810 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
25820 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
25830 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
25840 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
25850 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
25860 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
25870 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
25880 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
25890 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
258a0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
258b0 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
258c0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
258d0 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
258e0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
258f0 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
25900 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
25910 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
25920 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
25930 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
25940 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
25950 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
25960 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
25970 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
25980 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
25990 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
259a0 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
259b0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
259c0 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
259d0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
259e0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
259f0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
25a00 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
25a10 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
25a20 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
25a30 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
25a40 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
25a50 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
25a60 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
25a70 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
25a80 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
25a90 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
25aa0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
25ab0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
25ac0 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
25ad0 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
25ae0 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
25af0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
25b00 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
25b10 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
25b20 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
25b30 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
25b40 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
25b50 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
25b60 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
25b70 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
25b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25b90 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
25ba0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
25bb0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
25bc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25bd0 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
25be0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
25bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
25c00 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
25c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
25c20 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
25c30 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
25c40 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
25c50 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
25c60 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
25c70 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
25c80 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
25c90 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
25ca0 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
25cb0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
25cc0 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
25cd0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
25ce0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
25cf0 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
25d00 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
25d10 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
25d20 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
25d30 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
25d40 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
25d50 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25d60 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
25d70 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
25d80 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
25d90 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
25da0 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
25db0 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
25dc0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
25dd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
25de0 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
25df0 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
25e00 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
25e10 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
25e20 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
25e30 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
25e40 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
25e50 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
25e60 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
25e70 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
25e80 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
25e90 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
25ea0 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
25eb0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
25ec0 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
25ed0 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
25ee0 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
25ef0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
25f00 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
25f10 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
25f20 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
25f30 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
25f40 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
25f50 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
25f60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
25f70 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
25f80 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
25f90 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25fa0 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
25fb0 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
25fc0 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
25fd0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
25fe0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
25ff0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26000 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
26010 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
26020 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
26030 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
26040 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
26050 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
26060 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
26070 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
26080 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
26090 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
260a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
260b0 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
260c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
260d0 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
260e0 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
260f0 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
26100 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
26110 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
26120 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
26130 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
26140 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
26150 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
26160 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
26170 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
26180 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
26190 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
261a0 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
261b0 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
261c0 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
261d0 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
261e0 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
261f0 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
26200 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
26210 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
26220 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
26230 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
26240 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65   .** provided (e
26250 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
26260 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
26270 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
26280 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
26290 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
262a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
262b0 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
262c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
262d0 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
262e0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
262f0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
26300 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
26310 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
26320 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
26330 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
26340 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
26350 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
26360 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
26370 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
26380 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
26390 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
263a0 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
263b0 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
263c0 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
263d0 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
263e0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
263f0 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
26400 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
26410 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
26420 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
26430 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
26440 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26450 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
26460 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
26470 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
26480 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
26490 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
264a0 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
264b0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
264c0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
264d0 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65  a,b,c,d)    0.#e
264e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
264f0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
26500 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
26510 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
26520 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
26530 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
26540 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
26550 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
26560 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
26570 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
26580 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
26590 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
265a0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
265b0 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
265c0 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
265d0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
265e0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
265f0 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
26600 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
26610 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
26620 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
26630 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
26640 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
26650 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
26660 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
26670 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
26680 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
26690 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
266a0 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
266b0 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
266c0 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
266d0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
266e0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
266f0 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  EST.** is not de
26700 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
26710 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
26720 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69  ILTIN_TEST.  voi
26730 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
26740 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
26750 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26760 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
26770 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
26780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
26790 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
267a0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
267b0 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
267c0 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
267d0 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
267e0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
267f0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
26800 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
26810 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
26820 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
26830 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
26840 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
26850 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
26860 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
26870 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
26880 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
26890 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
268a0 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
268b0 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
268c0 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
268d0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
268e0 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
268f0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
26900 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
26910 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
26920 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
26930 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
26940 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
26950 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
26960 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
26970 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
26980 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
26990 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
269a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
269b0 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
269c0 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
269d0 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
269e0 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
269f0 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
26a00 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
26a10 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
26a20 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
26a30 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
26a40 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
26a50 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
26a60 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
26a70 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
26a80 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
26a90 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
26aa0 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
26ab0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
26ac0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
26ad0 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
26ae0 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
26af0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
26b00 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
26b10 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
26b20 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
26b30 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
26b40 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
26b50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
26b60 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
26b70 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69  te3_file *);.  i
26b80 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
26b90 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f  lExists(sqlite3_
26ba0 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a  file *p);.#else.
26bb0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
26bc0 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66  3JournalSize(pVf
26bd0 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73  s) ((pVfs)->szOs
26be0 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20  File).  #define 
26bf0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
26c00 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66  ists(p) 1.#endif
26c10 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ..void sqlite3Me
26c20 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
26c30 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e  ite3_file *);.in
26c40 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  t sqlite3MemJour
26c50 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69  nalSize(void);.i
26c60 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a  nt sqlite3IsMemJ
26c70 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66  ournal(sqlite3_f
26c80 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c  ile *);..#if SQL
26c90 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
26ca0 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69  TH>0.  void sqli
26cb0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
26cc0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
26cd0 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20  Expr *p);.  int 
26ce0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
26cf0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
26d00 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
26d10 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
26d20 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
26d30 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
26d40 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
26d50 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ht(x,y).  #defin
26d60 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
26d70 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
26d80 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
26d90 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
26da0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
26db0 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
26dc0 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
26dd0 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
26de0 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
26df0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
26e00 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
26e10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
26e20 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
26e30 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
26e40 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
26e50 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
26e60 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
26e70 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
26e80 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
26e90 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
26ea0 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
26eb0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
26ec0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
26ed0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
26ee0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
26ef0 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
26f00 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
26f10 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
26f20 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
26f30 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
26f40 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
26f50 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
26f60 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
26f70 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
26f80 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
26f90 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
26fa0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
26fb0 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
26fc0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
26fd0 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
26fe0 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
26ff0 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
27000 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a  ing messages. .*
27010 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
27020 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23  ENABLE_IOTRACE.#
27030 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
27040 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  A)  if( sqlite3I
27050 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65  oTrace ){ sqlite
27060 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20  3IoTrace A; }.  
27070 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
27080 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a  IOTraceSql(Vdbe*
27090 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  );.SQLITE_EXTERN
270a0 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49   void (*sqlite3I
270b0 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
270c0 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
270d0 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
270e0 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
270f0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
27100 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
27110 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
27120 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
27130 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
27140 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
27150 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
27160 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
27170 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
27180 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
27190 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
271a0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
271b0 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
271c0 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
271d0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
271e0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
271f0 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
27200 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
27210 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
27220 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
27230 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
27240 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
27250 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
27260 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
27270 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
27280 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
27290 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
272a0 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
272b0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
272c0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
272d0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
272e0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
272f0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
27300 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
27310 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
27320 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
27330 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
27340 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
27350 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
27360 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
27370 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
27380 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
27390 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
273a0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
273b0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
273c0 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
273d0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
273e0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
273f0 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
27400 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
27410 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
27420 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
27430 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
27440 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
27450 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
27460 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
27470 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
27480 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
27490 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
274a0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
274b0 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
274c0 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
274d0 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
274e0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
274f0 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
27500 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
27510 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
27520 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
27530 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
27540 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
27550 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
27560 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
27570 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
27580 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
27590 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
275a0 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
275b0 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
275c0 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
275d0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
275e0 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
275f0 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
27600 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c  raint. .**.** Al
27610 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
27620 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
27630 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
27640 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
27650 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
27660 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
27670 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
27680 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
27690 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
276a0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
276b0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
276c0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
276d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
276e0 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
276f0 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
27700 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
27710 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
27720 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
27730 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27740 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
27750 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
27760 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
27770 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
27780 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
27790 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
277a0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
277b0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
277c0 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
277d0 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
277e0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
277f0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
27800 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
27810 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65  * Might have bee
27820 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  n lookaside memo
27830 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ry */.#define ME
27840 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
27850 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
27860 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
27870 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
27880 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
27890 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
278a0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
278b0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44  define MEMTYPE_D
278c0 42 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  B         0x10  
278d0 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44  /* Uses sqlite3D
278e0 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c  bMalloc, not sql
278f0 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23  ite_malloc */..#
27900 69 66 20 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  if (SQLITE_ENABL
27910 45 5f 41 50 50 4c 45 5f 53 50 49 3e 30 29 20 26  E_APPLE_SPI>0) &
27920 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c  & defined(__APPL
27930 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  E__)../*.** An i
27940 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
27950 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
27960 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  re is used to ho
27970 6c 64 20 74 68 65 20 70 72 6f 63 65 73 73 20 49  ld the process I
27980 44 0a 2a 2a 20 61 6e 64 20 72 65 74 75 72 6e 2d  D.** and return-
27990 62 79 2d 72 65 66 65 72 65 6e 63 65 20 6c 6f 63  by-reference loc
279a0 6b 73 74 61 74 65 20 76 61 6c 75 65 2e 20 20 54  kstate value.  T
279b0 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  he SQLITE_FCNTL_
279c0 4c 4f 43 4b 53 54 41 54 45 5f 50 49 44 0a 2a 2a  LOCKSTATE_PID.**
279d0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 34 74   requires the 4t
279e0 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  h argument to sq
279f0 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
27a00 6f 6c 20 74 6f 20 62 65 20 61 20 70 6f 69 6e 74  ol to be a point
27a10 65 72 20 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74  er to an.** inst
27a20 61 6e 63 65 20 6f 66 20 4c 6f 63 6b 73 74 61 74  ance of Lockstat
27a30 65 50 49 44 20 69 6e 69 74 69 61 6c 69 7a 65 64  ePID initialized
27a40 20 77 69 74 68 20 61 20 4c 6f 63 6b 73 74 61 74   with a Lockstat
27a50 65 50 49 44 2e 70 69 64 20 76 61 6c 75 65 20 65  ePID.pid value e
27a60 71 75 61 6c 0a 2a 2a 20 74 6f 20 61 20 70 72 6f  qual.** to a pro
27a70 63 65 73 73 20 49 44 20 74 6f 20 62 65 20 74 65  cess ID to be te
27a80 73 74 65 64 2c 20 6f 72 20 74 68 65 20 73 70 65  sted, or the spe
27a90 63 69 61 6c 20 76 61 6c 75 65 20 53 51 4c 49 54  cial value SQLIT
27aa0 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 41 4e 59 50  E_LOCKSTATE_ANYP
27ab0 49 44 0a 2a 2a 20 54 68 65 20 4c 6f 63 6b 73 74  ID.** The Lockst
27ac0 61 74 65 2e 73 74 61 74 65 20 76 61 6c 75 65 20  ate.state value 
27ad0 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 74 6f  is always set to
27ae0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
27af0 6f 77 69 6e 67 20 76 61 6c 75 65 73 0a 2a 2a 20  owing values.** 
27b00 77 68 65 6e 20 73 71 6c 69 74 65 33 5f 66 69 6c  when sqlite3_fil
27b10 65 5f 63 6f 6e 74 72 6f 6c 20 72 65 74 75 72 6e  e_control return
27b20 73 3a 0a 2a 2a 20 0a 2a 2a 20 20 20 53 51 4c 49  s:.** .**   SQLI
27b30 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 46 46  TE_LOCKSTATE_OFF
27b40 20 20 20 20 6e 6f 20 61 63 74 69 76 65 20 73 71      no active sq
27b50 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20  lite file locks 
27b60 6d 61 74 63 68 20 74 68 65 20 73 70 65 63 69 66  match the specif
27b70 69 65 64 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c  ied pid.**   SQL
27b80 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e  ITE_LOCKSTATE_ON
27b90 20 20 20 20 20 61 63 74 69 76 65 20 73 71 6c 69       active sqli
27ba0 74 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61  te file locks ma
27bb0 74 63 68 20 74 68 65 20 73 70 65 63 69 66 69 65  tch the specifie
27bc0 64 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54  d pid.**   SQLIT
27bd0 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4e 4f 54 41  E_LOCKSTATE_NOTA
27be0 44 42 20 70 61 74 68 20 70 6f 69 6e 74 73 20 74  DB path points t
27bf0 6f 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73  o a file that is
27c00 20 6e 6f 74 20 61 6e 20 73 71 6c 69 74 65 20 64   not an sqlite d
27c10 62 20 66 69 6c 65 0a 2a 2a 20 20 20 53 51 4c 49  b file.**   SQLI
27c20 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 45 52 52  TE_LOCKSTATE_ERR
27c30 4f 52 20 20 70 61 74 68 20 77 61 73 20 6e 6f 74  OR  path was not
27c40 20 76 61 69 6c 64 20 6f 72 20 77 61 73 20 75 6e   vaild or was un
27c50 72 65 61 64 61 62 6c 65 0a 2a 2f 0a 74 79 70 65  readable.*/.type
27c60 64 65 66 20 73 74 72 75 63 74 20 4c 6f 63 6b 73  def struct Locks
27c70 74 61 74 65 50 49 44 20 4c 6f 63 6b 73 74 61 74  tatePID Lockstat
27c80 65 50 49 44 3b 0a 73 74 72 75 63 74 20 4c 6f 63  ePID;.struct Loc
27c90 6b 73 74 61 74 65 50 49 44 20 7b 0a 20 20 70 69  kstatePID {.  pi
27ca0 64 5f 74 20 70 69 64 3b 20 20 20 20 20 20 20 20  d_t pid;        
27cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 63           /* Proc
27cc0 65 73 73 20 49 44 20 74 6f 20 74 65 73 74 20 2a  ess ID to test *
27cd0 2f 0a 20 20 69 6e 74 20 73 74 61 74 65 3b 20 20  /.  int state;  
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27cf0 2a 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74  * The state of t
27d00 68 65 20 6c 6f 63 6b 20 28 72 65 74 75 72 6e 20  he lock (return 
27d10 76 61 6c 75 65 29 20 2a 2f 0a 7d 3b 0a 0a 23 65  value) */.};..#e
27d20 6e 64 69 66 20 2f 2a 20 28 53 51 4c 49 54 45 5f  ndif /* (SQLITE_
27d30 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49  ENABLE_APPLE_SPI
27d40 3e 30 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  >0) && defined(_
27d50 5f 41 50 50 4c 45 5f 5f 29 20 2a 2f 0a 0a 2f 2a  _APPLE__) */../*
27d60 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
27d70 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
27d80 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
27d90 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
27da0 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
27db0 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
27dc0 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
27dd0 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
27de0 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
27df0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
27e00 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
27e10 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54  #endif /* _SQLIT
27e20 45 49 4e 54 5f 48 5f 20 2a 2f 0a                 EINT_H_ */.