/ Hex Artifact Content
Login

Artifact 8c95b3589d084ea68e947aa84abc32f185ed6155:


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 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
19a0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
19b0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
19c0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
19d0: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
19e0: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
19f0: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
1a00: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
1a10: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a20: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
1a30: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
1a40: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
1a50: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
1a60: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
1a70: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
1a80: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
1a90: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
1aa0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
1ab0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
1ac0: 65 72 20 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  er S..*/.#if def
1ad0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1ae0: 5f 48 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  _H).# define SQL
1af0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
1b00: 29 20 5c 0a 20 20 20 20 28 28 75 69 6e 74 70 74  ) \.    ((uintpt
1b10: 72 5f 74 29 28 50 29 3e 3d 28 75 69 6e 74 70 74  r_t)(P)>=(uintpt
1b20: 72 5f 74 29 28 53 29 20 26 26 20 28 75 69 6e 74  r_t)(S) && (uint
1b30: 70 74 72 5f 74 29 28 50 29 3c 28 75 69 6e 74 70  ptr_t)(P)<(uintp
1b40: 74 72 5f 74 29 28 45 29 29 0a 23 65 6c 73 65 0a  tr_t)(E)).#else.
1b50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1b60: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
1b70: 50 29 3e 3d 28 53 29 20 26 26 20 28 50 29 3c 28  P)>=(S) && (P)<(
1b80: 45 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E)).#endif../*.*
1b90: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
1ba0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
1bb0: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
1bc0: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
1bd0: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
1be0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
1bf0: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
1c00: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
1c10: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
1c20: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
1c30: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1c40: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1c50: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
1c60: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1c70: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
1c80: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
1c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1ca0: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
1cb0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
1cc0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
1cd0: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
1ce0: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
1cf0: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
1d00: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
1d10: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
1d20: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
1d30: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
1d40: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1d50: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
1d60: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1d70: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
1d80: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
1d90: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
1da0: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
1db0: 31 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1300.#    if !de
1dc0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
1dd0: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
1de0: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
1df0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1e00: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
1e10: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
1e20: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
1e30: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
1e40: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
1e50: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
1e60: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
1e70: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
1e80: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
1e90: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
1ea0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
1eb0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
1ec0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
1ed0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1ee0: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
1ef0: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
1f00: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
1f10: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
1f20: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
1f30: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
1f40: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
1f50: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
1f60: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
1f70: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
1f80: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
1f90: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
1fa0: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
1fb0: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
1fc0: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
1fd0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
1fe0: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
1ff0: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2000: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2010: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2020: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
2030: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
2040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2050: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2060: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2070: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2080: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2090: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
20a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
20b0: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
20c0: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
20d0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
20e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
20f0: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2100: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2110: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
2120: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
2130: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
2140: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2150: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
2160: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2170: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2180: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2190: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
21a0: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
21b0: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
21c0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
21d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
21e0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
21f0: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2200: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
2210: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
2220: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
2230: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
2240: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
2250: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
2260: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2270: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2280: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2290: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
22a0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
22b0: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
22c0: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
22d0: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
22e0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
22f0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2300: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2310: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
2320: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
2330: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2340: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
2350: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
2360: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2370: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2380: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2390: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
23a0: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
23b0: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
23c0: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
23d0: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
23e0: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
23f0: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2400: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
2410: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
2420: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
2430: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
2440: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
2450: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
2460: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2470: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2480: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2490: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
24a0: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
24b0: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
24c0: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
24d0: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
24e0: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
24f0: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2500: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
2510: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
2520: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
2530: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
2540: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
2550: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
2560: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2570: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2580: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2590: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
25a0: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
25b0: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
25c0: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
25d0: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
25e0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
25f0: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2600: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2610: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2620: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2630: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2640: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2650: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2660: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2670: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2680: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2690: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
26a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
26b0: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
26c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26d0: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
26e0: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
26f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2700: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2710: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2720: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2730: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2740: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2750: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2760: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2770: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2790: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
27a0: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
27b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
27c0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
27d0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
27e0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
27f0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2800: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2810: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2820: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2830: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2840: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2850: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2860: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2870: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2880: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2890: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
28a0: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
28b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
28c0: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
28d0: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
28e0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28f0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2900: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2910: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2920: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2940: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2950: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2960: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2970: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2980: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2990: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
29a0: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
29b0: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
29c0: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
29d0: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
29e0: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
29f0: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2a00: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2a10: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2a20: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2a30: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2a40: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2a50: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2a60: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2a70: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2a80: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2a90: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2aa0: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2ab0: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2ac0: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2ad0: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2af0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2b00: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2b10: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2b20: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2b30: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2b40: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2b50: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2b60: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
2b70: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
2b80: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
2b90: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2ba0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
2bb0: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
2bc0: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
2bd0: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
2be0: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
2bf0: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
2c00: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
2c10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
2c20: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
2c30: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
2c40: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
2c50: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
2c60: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
2c70: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
2c80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c90: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2ca0: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
2cb0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2cc0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
2cd0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2ce0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
2cf0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2d00: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
2d10: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2d20: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
2d30: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
2d40: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
2d50: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d60: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d70: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
2d80: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2d90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
2da0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2db0: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
2dc0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
2dd0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
2de0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
2df0: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
2e00: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
2e10: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2e20: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2e30: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2e40: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2e50: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2e60: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2e70: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2e80: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2e90: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2ea0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2eb0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2ec0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2ed0: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2ee0: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2ef0: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2f00: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2f10: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2f20: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2f30: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2f40: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2f50: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2f60: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2f70: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2f80: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2f90: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2fa0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2fb0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2fc0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2fd0: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2fe0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2ff0: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3000: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
3010: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
3020: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
3030: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
3040: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
3050: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
3060: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3070: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3080: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3090: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
30a0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
30b0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
30c0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
30d0: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
30e0: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
30f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3100: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
3110: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
3120: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
3130: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
3140: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
3150: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
3160: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3170: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3180: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3190: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
31a0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
31b0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
31c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
31d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
31e0: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
31f0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3200: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
3210: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
3220: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
3230: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
3240: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
3250: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
3260: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3270: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3280: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3290: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
32a0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
32b0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
32c0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
32d0: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
32e0: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
32f0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3300: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
3310: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
3320: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
3330: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
3340: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
3350: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
3360: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3370: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3380: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3390: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
33a0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
33b0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
33c0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
33d0: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
33e0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
33f0: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3400: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
3410: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
3420: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3430: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
3440: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
3450: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
3460: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3470: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3480: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3490: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
34a0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
34b0: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
34c0: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
34d0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
34e0: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
34f0: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3500: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3510: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3520: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3530: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
3540: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
3550: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
3560: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3570: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3580: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3590: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
35a0: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
35b0: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
35c0: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
35d0: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
35e0: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
35f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3600: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3610: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3620: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3630: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3640: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3650: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3660: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3670: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3680: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3690: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
36a0: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
36b0: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
36c0: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
36d0: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
36e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
36f0: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3700: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3710: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3720: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3730: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
3740: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
3750: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3760: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
3770: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
3780: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3790: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
37a0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
37b0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
37c0: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
37d0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
37e0: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
37f0: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
3800: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
3810: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
3820: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3830: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
3840: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
3850: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
3860: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
3870: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
3880: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
3890: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
38a0: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
38b0: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
38c0: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
38d0: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
38e0: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
38f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
3900: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
3910: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
3920: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
3930: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
3940: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3950: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
3960: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3970: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
3980: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
3990: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
39a0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
39b0: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
39c0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
39d0: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
39e0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
39f0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3a00: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3a10: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3a20: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3a30: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
3a40: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
3a50: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
3a60: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
3a70: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
3a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a90: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
3aa0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3ab0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3ac0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3ad0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3ae0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3af0: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3b00: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3b10: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3b20: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3b30: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3b40: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3b50: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3b60: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3b70: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3b80: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
3b90: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
3ba0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
3bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
3bc0: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
3bd0: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
3be0: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3bf0: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3c00: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3c10: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3c20: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3c30: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3c40: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3c50: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3c60: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3c70: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3c80: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
3c90: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
3ca0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3cb0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3cc0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
3cd0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
3ce0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3cf0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3d00: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3d10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d20: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3d30: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3d40: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3d50: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3d60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3d70: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3d80: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
3d90: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
3da0: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
3db0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
3dc0: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
3dd0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3de0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
3df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
3e00: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
3e10: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
3e20: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
3e30: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
3e40: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
3e50: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
3e60: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
3e70: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
3e80: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
3e90: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
3ea0: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
3eb0: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
3ec0: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
3ed0: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
3ee0: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
3ef0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
3f00: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
3f10: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
3f20: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
3f30: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
3f40: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
3f50: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
3f60: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
3f70: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
3f80: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
3f90: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
3fa0: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
3fb0: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
3fc0: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
3fd0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
3fe0: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
3ff0: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4000: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4010: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
4020: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
4030: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
4040: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
4050: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
4060: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
4070: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4080: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4090: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
40a0: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
40b0: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
40c0: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
40d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
40e0: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
40f0: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4100: 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66  * If compiling f
4110: 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74  or a processor t
4120: 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69  hat lacks floati
4130: 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74  ng point support
4140: 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20  ,.** substitute 
4150: 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61  integer for floa
4160: 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69  ting-point.*/.#i
4170: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4180: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
4190: 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20  # define double 
41a0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
41b0: 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69  efine float sqli
41c0: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
41d0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
41e0: 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  E sqlite_int64.#
41f0: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42   ifndef SQLITE_B
4200: 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e  IG_DBL.#   defin
4210: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
4220: 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36   (((sqlite3_int6
4230: 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69  4)1)<<50).# endi
4240: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
4250: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
4260: 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65  FUNCS 1.# define
4270: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
4280: 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c  CE 1.# undef SQL
4290: 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e  ITE_MIXED_ENDIAN
42a0: 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75  _64BIT_FLOAT.# u
42b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45  ndef SQLITE_HAVE
42c0: 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69  _ISNAN.#endif.#i
42d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
42e0: 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51  _DBL.# define SQ
42f0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65  LITE_BIG_DBL (1e
4300: 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  99).#endif../*.*
4310: 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  * OMIT_TEMPDB is
4320: 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c   set to 1 if SQL
4330: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ITE_OMIT_TEMPDB 
4340: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30  is defined, or 0
4350: 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48  .** afterward. H
4360: 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f  aving this macro
4370: 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61   allows us to ca
4380: 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c  use the C compil
4390: 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  er.** to omit co
43a0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
43b0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
43c0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
43d0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
43e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
43f0: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
4400: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
4410: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
4420: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
4430: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
4440: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
4450: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
4460: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
4470: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
4480: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
4490: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
44a0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
44b0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
44c0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
44d0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
44e0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
44f0: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
4500: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
4510: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
4520: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
4530: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
4540: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
4550: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
4560: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
4570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4580: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
4590: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
45a0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
45b0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
45c0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
45d0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
45e0: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
45f0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
4600: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
4610: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
4620: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
4630: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
4640: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4650: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
4660: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
4670: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
4680: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
4690: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
46a0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
46b0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
46c0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
46d0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
46e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
46f0: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
4700: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
4710: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4720: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
4730: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
4740: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
4750: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20  if../*.** If no 
4760: 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 70  value has been p
4770: 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c 49  rovided for SQLI
4780: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4790: 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20  READS, or if.** 
47a0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
47b0: 45 20 69 73 20 73 65 74 20 74 6f 20 33 20 28 6e  E is set to 3 (n
47c0: 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72 61  ever use tempora
47d0: 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20 69  ry files), set i
47e0: 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f  t.** to zero..*/
47f0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  .#if SQLITE_TEMP
4800: 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c  _STORE==3 || SQL
4810: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 3d  ITE_THREADSAFE==
4820: 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  0.# undef SQLITE
4830: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4840: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
4850: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4860: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
4870: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
4880: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4890: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
48a0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
48b0: 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23 69  EADS 8.#endif.#i
48c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
48d0: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
48e0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
48f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4900: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
4910: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
4920: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
4930: 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58  READS>SQLITE_MAX
4940: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
4950: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
4960: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4970: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
4980: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4990: 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46 41  EADS SQLITE_DEFA
49a0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
49b0: 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  DS.#endif../*.**
49c0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e 69   The default ini
49d0: 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  tial allocation 
49e0: 66 6f 72 20 74 68 65 20 70 61 67 65 63 61 63 68  for the pagecach
49f0: 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65 70  e when using sep
4a00: 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61 63  arate.** pagecac
4a10: 68 65 73 20 66 6f 72 20 65 61 63 68 20 64 61 74  hes for each dat
4a20: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
4a30: 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e 75  .  A positive nu
4a40: 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e  mber is the.** n
4a50: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e 20  umber of pages. 
4a60: 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   A negative numb
4a70: 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e  er N translation
4a80: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 62  s means that a b
4a90: 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32  uffer.** of -102
4aa0: 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c 6c  4*N bytes is all
4ab0: 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65 64 20  ocated and used 
4ac0: 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67 65  for as many page
4ad0: 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c  s as it will hol
4ae0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
4af0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
4b00: 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66  CHE_INITSZ.# def
4b10: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4b20: 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a  LT_PCACHE_INITSZ
4b30: 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   100.#endif../*.
4b40: 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20  ** GCC does not 
4b50: 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65  define the offse
4b60: 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77  tof() macro so w
4b70: 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20  e'll have to do 
4b80: 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e  it.** ourselves.
4b90: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73  .*/.#ifndef offs
4ba0: 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66  etof.#define off
4bb0: 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c  setof(STRUCTURE,
4bc0: 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63  FIELD) ((int)((c
4bd0: 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52  har*)&((STRUCTUR
4be0: 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23  E*)0)->FIELD)).#
4bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
4c00: 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d  ros to compute m
4c10: 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d  inimum and maxim
4c20: 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72  um of two number
4c30: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49  s..*/.#define MI
4c40: 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f  N(A,B) ((A)<(B)?
4c50: 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65  (A):(B)).#define
4c60: 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28   MAX(A,B) ((A)>(
4c70: 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a  B)?(A):(B))../*.
4c80: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
4c90: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
4ca0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
4cb0: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
4cc0: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
4cd0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
4ce0: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
4cf0: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
4d00: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
4d10: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
4d20: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
4d30: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
4d40: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
4d50: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
4d60: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
4d70: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
4d80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
4d90: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
4da0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
4db0: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
4dc0: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
4dd0: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
4de0: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
4df0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
4e00: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
4e10: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
4e20: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
4e30: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
4e40: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
4e50: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
4e60: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
4e70: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
4e80: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
4e90: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
4ea0: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
4eb0: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
4ec0: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
4ed0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
4ee0: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
4ef0: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
4f00: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
4f10: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
4f20: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
4f30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4f40: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
4f50: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
4f60: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
4f70: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
4f80: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
4f90: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
4fa0: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
4fb0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
4fc0: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
4fd0: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
4fe0: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
4ff0: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
5000: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
5010: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5020: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
5030: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5040: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5050: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5060: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5070: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5080: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5090: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
50a0: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
50b0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
50c0: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
50d0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
50e0: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
50f0: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5100: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5110: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5120: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5130: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5140: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5150: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5160: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5170: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5180: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
51a0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
51b0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
51c0: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
51d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
51e0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
51f0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5200: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5220: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5230: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5240: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5250: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5260: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5270: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5280: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
52a0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
52b0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
52c0: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
52d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
52e0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
52f0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5300: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5320: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5330: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5340: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5350: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5360: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5370: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5380: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5390: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
53a0: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
53b0: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
53c0: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
53d0: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
53e0: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
53f0: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5400: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5410: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5420: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5430: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5440: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5450: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5460: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5470: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
5480: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
5490: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
54a0: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
54b0: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
54c0: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
54d0: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
54e0: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
54f0: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
5500: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
5510: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
5520: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
5530: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
5540: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
5550: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5560: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
5570: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
5580: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
5590: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
55a0: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
55b0: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
55c0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
55d0: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
55e0: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
55f0: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
5600: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
5610: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
5620: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
5630: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
5640: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
5650: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
5660: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
5670: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
5680: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
5690: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
56a0: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
56b0: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
56c0: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
56d0: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
56e0: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
56f0: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
5700: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
5710: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
5720: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
5730: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
5740: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
5750: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
5760: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
5770: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
5780: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
5790: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
57a0: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
57b0: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
57c0: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
57d0: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
57e0: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
57f0: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
5800: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
5810: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
5820: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
5830: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
5840: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
5860: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
5870: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
5880: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
5890: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
58a0: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
58b0: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
58c0: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
58d0: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
58e0: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
58f0: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
5900: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
5910: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
5920: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
5930: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
5940: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
5950: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
5960: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
5970: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
5980: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
5990: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
59a0: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
59b0: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
59c0: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
59d0: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
59e0: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
59f0: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
5a00: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
5a10: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
5a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
5a30: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
5a40: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
5a50: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
5a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
5a70: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
5a80: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
5a90: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
5aa0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
5ab0: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
5ac0: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
5ad0: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5ae0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5af0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5b00: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5b10: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
5b20: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
5b30: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
5b40: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
5b50: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5b60: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
5b70: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
5b80: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
5b90: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
5ba0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
5bb0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
5bc0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
5bd0: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
5be0: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
5bf0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
5c00: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
5c10: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
5c20: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
5c30: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
5c40: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
5c50: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
5c60: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
5c70: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
5c80: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
5c90: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
5ca0: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
5cb0: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
5cc0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5cd0: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
5ce0: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
5cf0: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
5d00: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
5d10: 69 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36  if (defined(i386
5d20: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5d30: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
5d40: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
5d50: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
5d60: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
5d70: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
5d80: 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  _64__) || define
5d90: 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20  d(_M_X64)  ||   
5da0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
5db0: 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66  _M_AMD64) || def
5dc0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20  ined(_M_ARM)    
5dd0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
5de0: 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  6)   ||    \.   
5df0: 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f    defined(__arm_
5e00: 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _)) && !defined(
5e10: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5e20: 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69  YTEORDER).# defi
5e30: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
5e40: 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65  DER    1234.# de
5e50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
5e60: 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66  NDIAN    0.# def
5e70: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
5e80: 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69  EENDIAN 1.# defi
5e90: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
5ea0: 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54  ATIVE  SQLITE_UT
5eb0: 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66  F16LE.#endif.#if
5ec0: 20 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29   (defined(sparc)
5ed0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
5ee0: 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20  _ppc__))  \.    
5ef0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
5f00: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
5f10: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
5f20: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5f30: 20 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65     4321.# define
5f40: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
5f50: 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20  N    1.# define 
5f60: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
5f70: 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IAN 0.# define S
5f80: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
5f90: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  E  SQLITE_UTF16B
5fa0: 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  E.#endif.#if !de
5fb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54  fined(SQLITE_BYT
5fc0: 45 4f 52 44 45 52 29 0a 23 20 69 66 64 65 66 20  EORDER).# ifdef 
5fd0: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
5fe0: 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20  ION.  const int 
5ff0: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
6000: 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20  # else.  extern 
6010: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6020: 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20  3one;.# endif.# 
6030: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6040: 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20 20  TEORDER    0    
6050: 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e 6b   /* 0 means "unk
6060: 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d  nown at compile-
6070: 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69 6e  time" */.# defin
6080: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6090: 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29  AN    (*(char *)
60a0: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30  (&sqlite3one)==0
60b0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
60c0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28  E_LITTLEENDIAN (
60d0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
60e0: 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66  e3one)==1).# def
60f0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6100: 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f  NATIVE  (SQLITE_
6110: 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45  BIGENDIAN?SQLITE
6120: 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f  _UTF16BE:SQLITE_
6130: 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a  UTF16LE).#endif.
6140: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73  ./*.** Constants
6150: 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74   for the largest
6160: 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f   and smallest po
6170: 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69  ssible 64-bit si
6180: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a  gned integers..*
6190: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61  * These macros a
61a0: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77  re designed to w
61b0: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
61c0: 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64   both 32-bit and
61d0: 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69   64-bit.** compi
61e0: 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lers..*/.#define
61f0: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20   LARGEST_INT64  
6200: 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69  (0xffffffff|(((i
6210: 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
6220: 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41  32)).#define SMA
6230: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69  LLEST_INT64 (((i
6240: 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54  64)-1) - LARGEST
6250: 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52  _INT64)../*.** R
6260: 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72  ound up a number
6270: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72   to the next lar
6280: 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ger multiple of 
6290: 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  8.  This is used
62a0: 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62  .** to force 8-b
62b0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e  yte alignment on
62c0: 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63   64-bit architec
62d0: 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tures..*/.#defin
62e0: 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20  e ROUND8(x)     
62f0: 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a  (((x)+7)&~7)../*
6300: 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74  .** Round down t
6310: 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75  o the nearest mu
6320: 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23  ltiple of 8.*/.#
6330: 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e  define ROUNDDOWN
6340: 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f  8(x) ((x)&~7)../
6350: 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74  *.** Assert that
6360: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69   the pointer X i
6370: 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20  s aligned to an 
6380: 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e  8-byte boundary.
6390: 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20    This.** macro 
63a0: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74  is used only wit
63b0: 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20  hin assert() to 
63c0: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
63d0: 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c  code gets.** all
63e0: 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72   alignment restr
63f0: 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e  ictions correct.
6400: 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69  .**.** Except, i
6410: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
6420: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69  ALIGNED_MALLOC i
6430: 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20  s defined, then 
6440: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
6450: 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65  g malloc() imple
6460: 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20  mentation might 
6470: 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65  return us 4-byte
6480: 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e   aligned.** poin
6490: 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63  ters.  In that c
64a0: 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79  ase, only verify
64b0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   4-byte alignmen
64c0: 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  t..*/.#ifdef SQL
64d0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
64e0: 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69  ED_MALLOC.# defi
64f0: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
6500: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
6510: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
6520: 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65  ar*)0)&3)==0).#e
6530: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47  lse.# define EIG
6540: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
6550: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
6560: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
6570: 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a  &7)==0).#endif..
6580: 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d  /*.** Disable MM
6590: 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20  AP on platforms 
65a0: 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77  where it is know
65b0: 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f  n to not work.*/
65c0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f  .#if defined(__O
65d0: 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66  penBSD__) || def
65e0: 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29  ined(__QNXNTO__)
65f0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6600: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6620: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65  X_MMAP_SIZE 0.#e
6630: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61  ndif../*.** Defa
6640: 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65  ult maximum size
6650: 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20   of memory used 
6660: 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64  by memory-mapped
6670: 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a   I/O in the VFS.
6680: 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c  */.#ifdef __APPL
6690: 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54  E__.# include <T
66a0: 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c  argetConditional
66b0: 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  s.h>.#endif.#ifn
66c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
66d0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
66e0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
66f0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
6700: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
6710: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
6720: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
6730: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
6740: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c  defined(__sun) \
6750: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
6760: 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c  FreeBSD__) \.  |
6770: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67  | defined(__Drag
6780: 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66  onFly__).#   def
6790: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
67a0: 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30  MAP_SIZE 0x7fff0
67b0: 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31  000  /* 21474181
67c0: 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20  12 */.# else.#  
67d0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
67e0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
67f0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
6800: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6810: 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63  SIZE_xc 1 /* exc
6820: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
6830: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
6840: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
6850: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
6860: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
6870: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
6880: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
6890: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
68a0: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
68b0: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
68c0: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
68d0: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
68e0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
68f0: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
6900: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
6910: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
6920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
6930: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
6940: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6950: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6960: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
6970: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
6980: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  */.#endif.#if SQ
6990: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
69a0: 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41  P_SIZE>SQLITE_MA
69b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e  X_MMAP_SIZE.# un
69c0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
69d0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
69e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
69f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53  AULT_MMAP_SIZE S
6a00: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6a10: 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  IZE.#endif../*.*
6a20: 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51  * Only one of SQ
6a30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6a40: 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42  3 or SQLITE_ENAB
6a50: 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20  LE_STAT4 can be 
6a60: 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f  defined..** Prio
6a70: 72 69 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f  rity is given to
6a80: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6a90: 54 41 54 34 2e 20 20 49 66 20 65 69 74 68 65 72  TAT4.  If either
6aa0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c   are defined, al
6ab0: 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c  so.** define SQL
6ac0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6ad0: 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66  _OR_STAT4.*/.#if
6ae0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
6af0: 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  E_STAT4.# undef 
6b00: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6b10: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
6b20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
6b30: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
6b40: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6b50: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
6b60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6b70: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
6b80: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
6b90: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6ba0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6bb0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6bc0: 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  STAT4.#endif../*
6bd0: 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f  .** SELECTTRACE_
6be0: 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20  ENABLED will be 
6bf0: 65 69 74 68 65 72 20 31 20 6f 72 20 30 20 64 65  either 1 or 0 de
6c00: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
6c10: 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65  er or not.** the
6c20: 20 53 65 6c 65 63 74 20 71 75 65 72 79 20 67 65   Select query ge
6c30: 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20  nerator tracing 
6c40: 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64 20  logic is turned 
6c50: 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  on..*/.#if defin
6c60: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
6c70: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
6c80: 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54  TE_ENABLE_SELECT
6c90: 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65 20  TRACE).# define 
6ca0: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
6cb0: 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  LED 1.#else.# de
6cc0: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6cd0: 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64 69  _ENABLED 0.#endi
6ce0: 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
6cf0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
6d00: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
6d10: 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
6d20: 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65   the busy-handle
6d30: 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  r.** callback fo
6d40: 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65  r a given sqlite
6d50: 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54   handle..**.** T
6d60: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
6d70: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
6d80: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
6d90: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
6da0: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
6db0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
6dc0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
6dd0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
6de0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
6df0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
6e00: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
6e10: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
6e20: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
6e30: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
6e40: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
6e50: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
6e60: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
6e70: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
6e80: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
6e90: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
6ea0: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
6eb0: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
6ec0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
6ed0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
6ee0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6f00: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
6f10: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
6f20: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
6f30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
6f40: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
6f50: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
6f60: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
6f70: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6f80: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
6f90: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6fa0: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
6fb0: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
6fc0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
6fd0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
6fe0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
6ff0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7000: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7010: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7020: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7030: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7040: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7050: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7060: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7070: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7080: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7090: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
70a0: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
70b0: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
70c0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
70d0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
70e0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
70f0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7100: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7110: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
7120: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
7130: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
7140: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
7150: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
7160: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
7170: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
7180: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
7190: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
71a0: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
71b0: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
71c0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
71d0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
71e0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
71f0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
7200: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
7210: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
7220: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
7230: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
7240: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
7250: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
7260: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
7270: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
7280: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
7290: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
72a0: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
72b0: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
72c0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
72d0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
72e0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
72f0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
7300: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
7310: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
7320: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
7330: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
7340: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
7350: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
7360: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
7370: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
7380: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
7390: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
73a0: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
73b0: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
73c0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
73d0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
73e0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
73f0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
7400: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
7410: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
7420: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
7430: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
7440: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
7450: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
7460: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
7470: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
7480: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
7490: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
74a0: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
74b0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
74c0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
74d0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
74e0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
74f0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
7500: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
7510: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
7520: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
7530: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
7540: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
7550: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
7560: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
7570: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
7580: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
7590: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
75a0: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
75b0: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
75c0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
75d0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
75e0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
75f0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
7600: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
7610: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
7620: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
7630: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
7640: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
7650: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
7660: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
7670: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
7680: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
7690: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
76a0: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
76b0: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
76c0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
76d0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
76e0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
76f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
7700: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
7710: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
7720: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
7730: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
7740: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
7750: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
7760: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
7770: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
7780: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
7790: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
77a0: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
77b0: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
77c0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
77d0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
77e0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
77f0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
7800: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
7810: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
7820: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
7830: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
7840: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
7850: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
7860: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
7870: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
7880: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
7890: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
78a0: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
78b0: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
78c0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
78d0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
78e0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
78f0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
7900: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
7910: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
7920: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
7930: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
7940: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
7950: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
7960: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
7970: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
7980: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
7990: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
79a0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
79b0: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
79c0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
79d0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
79e0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
79f0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
7a00: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
7a10: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
7a20: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
7a30: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
7a40: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
7a50: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7a60: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
7a70: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
7a80: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
7a90: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
7aa0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
7ab0: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
7ac0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
7ad0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
7ae0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
7af0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
7b00: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
7b10: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
7b20: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
7b30: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
7b40: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
7b50: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
7b60: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
7b70: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
7b80: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
7b90: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
7ba0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
7bb0: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
7bc0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
7bd0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
7be0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
7bf0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
7c00: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
7c10: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
7c20: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
7c30: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7c40: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
7c50: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
7c60: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
7c70: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
7c80: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
7c90: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
7ca0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
7cb0: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
7cc0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
7cd0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
7ce0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7cf0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
7d00: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
7d10: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
7d20: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
7d30: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
7d40: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
7d50: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
7d60: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
7d70: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
7d80: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
7d90: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
7da0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
7db0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
7dc0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
7dd0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7de0: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
7df0: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
7e00: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
7e10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7e20: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
7e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
7e40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7e50: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
7e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
7e70: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
7e80: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
7e90: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
7ea0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7eb0: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
7ec0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7ed0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
7ee0: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
7ef0: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
7f00: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
7f10: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
7f20: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
7f30: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
7f40: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
7f50: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
7f60: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
7f70: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
7f80: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
7f90: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
7fa0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
7fb0: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
7fc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7fd0: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
7fe0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
7ff0: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
8000: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
8010: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8020: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8030: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8040: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
8050: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
8060: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
8070: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
8080: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
8090: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
80a0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
80b0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
80c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
80d0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
80e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
80f0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
8100: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8110: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
8120: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
8130: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
8140: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8150: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
8160: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
8170: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
8180: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8190: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
81a0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
81b0: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
81c0: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
81d0: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
81e0: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
81f0: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
8200: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
8210: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
8220: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
8230: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
8240: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
8250: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
8260: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
8270: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
8280: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
8290: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
82a0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
82b0: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
82c0: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
82d0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
82e0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
82f0: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
8300: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
8310: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
8320: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
8330: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
8340: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
8350: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
8360: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
8370: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
8380: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
8390: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
83a0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
83b0: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
83c0: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
83d0: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
83e0: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
83f0: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
8400: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
8410: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
8420: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
8430: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
8440: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
8450: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
8460: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8470: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8480: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
8490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
84a0: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
84b0: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
84c0: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
84d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
84e0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
84f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
8500: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
8510: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
8520: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
8530: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
8540: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
8550: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
8560: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
8570: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
8580: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8590: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
85a0: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
85b0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
85c0: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
85d0: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
85e0: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
8610: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
8640: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8660: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
8670: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
8680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8690: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
86a0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
86b0: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
86c0: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
86d0: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
86e0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
86f0: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
8700: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
8710: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
8720: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
8730: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
8740: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
8750: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
8760: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
8770: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8780: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
8790: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
87a0: 43 48 52 4f 4e 4f 55 53 20 28 50 41 47 45 52 5f  CHRONOUS (PAGER_
87b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 46 55 4c 4c  SYNCHRONOUS_FULL
87c0: 2d 31 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  -1).#endif.#ifnd
87d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
87e0: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
87f0: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
8800: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
8810: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
8820: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8830: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
8840: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8850: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
8860: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
8870: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
8880: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
8890: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
88a0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
88b0: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
88c0: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
88d0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
88e0: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
88f0: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
8900: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
8910: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
8920: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
8930: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
8940: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
8950: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
8960: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
8970: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
8980: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
8990: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
89a0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
89b0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74 72  atabase */.  Btr
89c0: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
89d0: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
89e0: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
89f0: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
8a00: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
8a10: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
8a20: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
8a30: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
8a40: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
8a50: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
8a60: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
8a70: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
8a80: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
8a90: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
8aa0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
8ab0: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
8ac0: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
8ad0: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
8ae0: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
8af0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8b00: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
8b10: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
8b20: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
8b30: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
8b40: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
8b50: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
8b60: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
8b70: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
8b80: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
8b90: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
8ba0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
8bb0: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
8bc0: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
8bd0: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
8be0: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
8bf0: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
8c00: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
8c10: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
8c20: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
8c30: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
8c40: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
8c50: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
8c60: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
8c70: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
8c80: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
8c90: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
8ca0: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
8cb0: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
8cc0: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
8cd0: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
8ce0: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
8cf0: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
8d00: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
8d10: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
8d20: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
8d30: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
8d40: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
8d50: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
8d60: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
8d70: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
8d80: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
8d90: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
8da0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
8db0: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
8dc0: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
8dd0: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
8de0: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
8df0: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
8e00: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
8e10: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
8e20: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
8e30: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
8e40: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
8e50: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
8e60: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
8e70: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
8e80: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
8e90: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
8ea0: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
8eb0: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
8ec0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
8ed0: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
8ee0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
8ef0: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
8f00: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
8f10: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
8f20: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
8f30: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
8f40: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
8f50: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
8f60: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
8f70: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
8f80: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
8f90: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
8fa0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
8fb0: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
8fc0: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
8fd0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
8fe0: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
8ff0: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
9000: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
9010: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
9020: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
9030: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
9040: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9050: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
9060: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
9070: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
9080: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
9090: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
90a0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
90b0: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
90c0: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
90d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
90e0: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
90f0: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
9100: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
9110: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
9120: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
9130: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
9140: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
9150: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
9160: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
9170: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9180: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
9190: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
91a0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
91b0: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
91c0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
91d0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
91e0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
91f0: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
9200: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
9210: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
9220: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9230: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
9240: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
9250: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9260: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
9270: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
9280: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
9290: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
92a0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
92b0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
92c0: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
92d0: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
92e0: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
92f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9300: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
9310: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
9320: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
9330: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
9340: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
9350: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
9360: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
9370: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
9380: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
9390: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
93a0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
93b0: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
93c0: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
93d0: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
93e0: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
93f0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
9400: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
9410: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
9420: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
9430: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
9440: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
9450: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
9460: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
9470: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
9480: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
9490: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
94a0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
94b0: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
94c0: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
94d0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
94e0: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
94f0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
9500: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
9510: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
9520: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
9530: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
9540: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9550: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
9560: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
9570: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
9580: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
9590: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
95a0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
95b0: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
95c0: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
95d0: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
95e0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
95f0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
9600: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
9610: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
9620: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
9630: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
9640: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
9650: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
9660: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
9670: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
9680: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
9690: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
96a0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
96b0: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
96c0: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
96d0: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
96e0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
96f0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
9700: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
9710: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
9720: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
9730: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
9740: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
9750: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
9760: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
9770: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
9780: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
9790: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
97a0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
97b0: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
97c0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
97d0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
97e0: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
97f0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
9800: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
9810: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
9820: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
9830: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
9840: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
9850: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
9860: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
9870: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
9880: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9890: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
98a0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
98b0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
98c0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
98d0: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
98e0: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
98f0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
9900: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
9910: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
9920: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
9930: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
9940: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
9950: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
9960: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
9970: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
9980: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
9990: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
99a0: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
99b0: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
99c0: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
99d0: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
99e0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
99f0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
9a00: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
9a10: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
9a20: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
9a30: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
9a40: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
9a50: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
9a60: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
9a70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9a80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
9a90: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
9aa0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
9ab0: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
9ac0: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
9ad0: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
9ae0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
9af0: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
9b00: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
9b10: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
9b20: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
9b30: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9b40: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
9b50: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
9b60: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
9b70: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
9b80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
9b90: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
9ba0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
9bb0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
9bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9bd0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
9be0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
9bf0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
9c00: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
9c10: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9c20: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
9c30: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
9c40: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
9c50: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
9c60: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
9c70: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
9c80: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
9c90: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
9ca0: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
9cb0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
9cc0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
9cd0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
9ce0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
9cf0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
9d00: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
9d10: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
9d20: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
9d30: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
9d40: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
9d50: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
9d60: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
9d70: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
9d80: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
9d90: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
9da0: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
9db0: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
9dc0: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
9dd0: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
9de0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9df0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
9e00: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
9e10: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
9e20: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
9e30: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
9e40: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
9e50: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
9e60: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
9e70: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
9e80: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
9e90: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
9ea0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
9eb0: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
9ec0: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
9ed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
9ee0: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
9ef0: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
9f00: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
9f20: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
9f30: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
9f40: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f60: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
9f70: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
9f80: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
9f90: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
9fa0: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
9fb0: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
9fc0: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
9fd0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
9fe0: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
9ff0: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
a000: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
a010: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
a020: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
a030: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
a040: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
a050: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
a060: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
a070: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
a080: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
a090: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
a0a0: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
a0b0: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
a0c0: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
a0d0: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
a0e0: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
a0f0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
a100: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
a110: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
a120: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
a130: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
a140: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
a150: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
a160: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
a170: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
a180: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
a190: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
a1a0: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
a1b0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
a1c0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
a1d0: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
a1e0: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
a1f0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
a200: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
a210: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
a220: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
a230: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
a240: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
a250: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
a260: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
a270: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
a280: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
a290: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
a2a0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
a2b0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
a2c0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
a2d0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
a300: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
a310: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
a320: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
a330: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
a340: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
a350: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
a360: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a380: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
a390: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
a3a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
a3b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a3c0: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
a3d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
a3e0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
a3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
a400: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
a410: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
a420: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
a430: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
a440: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
a450: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
a460: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
a470: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
a480: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
a490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
a4a0: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
a4b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
a4c0: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
a4d0: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
a4e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
a4f0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
a500: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a520: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
a530: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
a540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a550: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
a560: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
a570: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
a580: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
a590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
a5a0: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
a5b0: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
a5c0: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
a5d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a5e0: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
a5f0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
a600: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
a610: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a630: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
a640: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
a650: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
a660: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
a670: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
a680: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
a690: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
a6a0: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
a6b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
a6c0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
a6d0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
a6e0: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a700: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
a710: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
a720: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
a730: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
a740: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
a750: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
a760: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
a770: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
a780: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a7a0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
a7b0: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
a7c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a7d0: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
a7e0: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
a7f0: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a810: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
a820: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
a830: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
a840: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
a850: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
a860: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
a870: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
a880: 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20   bBenignMalloc; 
a890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a8a0: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f  o not require OO
a8b0: 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  Ms if true */.  
a8c0: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a8e0: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
a8f0: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
a900: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
a910: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
a920: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
a930: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
a940: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
a950: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
a960: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
a970: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
a980: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
a990: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
a9a0: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
a9b0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
a9c0: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
a9d0: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
a9e0: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
a9f0: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
aa00: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
aa10: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
aa20: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
aa30: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e   is a TS */.  in
aa40: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
aa60: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
aa70: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
aa80: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aaa0: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
aab0: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
aac0: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
aad0: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
aae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
aaf0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
ab00: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
ab10: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
ab20: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
ab30: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
ab40: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
ab50: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
ab60: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
ab70: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
ab80: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
ab90: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
aba0: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
abb0: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
abc0: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
abd0: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
abe0: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
abf0: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
ac00: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
ac10: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
ac20: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
ac30: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ac50: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
ac60: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
ac70: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
ac80: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
ac90: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
aca0: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
acb0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
acc0: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
acf0: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
ad00: 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70  ng */.    u8 orp
ad10: 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20  hanTrigger;     
ad20: 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74        /* Last st
ad30: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
ad40: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
ad50: 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73   */.    u8 impos
ad60: 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20  terTable;       
ad70: 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20      /* Building 
ad80: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
ad90: 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20  e */.  } init;. 
ada0: 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65   int nVdbeActive
adb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
adc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45  * Number of VDBE
add0: 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  s currently runn
ade0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ing */.  int nVd
adf0: 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20  beRead;         
ae00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae10: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
ae20: 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72   that read or wr
ae30: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
ae40: 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20  beWrite;        
ae50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ae60: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
ae70: 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77   that read and w
ae80: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
ae90: 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20  dbeExec;        
aea0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
aeb0: 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
aec0: 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20  s to VdbeExec() 
aed0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72  */.  int nVDestr
aee0: 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oy;             
aef0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
af00: 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72  active OP_VDestr
af10: 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f  oy operations */
af20: 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f  .  int nExtensio
af30: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
af40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
af50: 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20  aded extensions 
af60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74  */.  void **aExt
af70: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
af80: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73     /* Array of s
af90: 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61  hared library ha
afa0: 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ndles */.  void 
afb0: 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c  (*xTrace)(void*,
afc0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20  const char*);   
afd0: 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75       /* Trace fu
afe0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
aff0: 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20   *pTraceArg;    
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
b020: 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66  t to the trace f
b030: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
b040: 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f  d (*xProfile)(vo
b050: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  id*,const char*,
b060: 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c  u64);  /* Profil
b070: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ing function */.
b080: 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65    void *pProfile
b090: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b0b0: 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69  rgument to profi
b0c0: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  le function */. 
b0d0: 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72   void *pCommitAr
b0e0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b0f0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
b100: 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  o xCommitCallbac
b110: 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  k() */.  int (*x
b120: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
b130: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
b140: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
b150: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
b160: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b180: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
b190: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
b1a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f   */.  void (*xRo
b1b0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
b1c0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
b1d0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
b1e0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
b1f0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
b200: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
b210: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
b220: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b230: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
b240: 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53  nt64);.#ifndef S
b250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
b260: 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62   int (*xWalCallb
b270: 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c  ack)(void *, sql
b280: 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
b290: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ar *, int);.  vo
b2a0: 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e  id *pWalArg;.#en
b2b0: 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  dif.  void(*xCol
b2c0: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
b2d0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
b2e0: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
b2f0: 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  );.  void(*xColl
b300: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
b310: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
b320: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
b330: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  *);.  void *pCol
b340: 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
b350: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72  lite3_value *pEr
b360: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  r;          /* M
b370: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
b380: 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e   message */.  un
b390: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
b3a0: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
b3b0: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
b3c0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
b3d0: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
b3e0: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
b3f0: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
b400: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
b410: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
b420: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
b430: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
b440: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
b450: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
b460: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b470: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
b480: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74  N.  sqlite3_xaut
b490: 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20  h xAuth;        
b4a0: 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68    /* Access auth
b4b0: 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69  orization functi
b4c0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  on */.  void *pA
b4d0: 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  uthArg;         
b4e0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
b4f0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63  ument to the acc
b500: 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f  ess auth functio
b510: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
b520: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b530: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
b540: 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  K.  int (*xProgr
b550: 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  ess)(void *);   
b560: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73    /* The progres
b570: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
b580: 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41  void *pProgressA
b590: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rg;           /*
b5a0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
b5b0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
b5c0: 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ck */.  unsigned
b5d0: 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20   nProgressOps;  
b5e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
b5f0: 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70  of opcodes for p
b600: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
b610: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
b620: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
b630: 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
b640: 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20  t nVTrans;      
b650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b660: 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66  llocated size of
b670: 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61   aVTrans */.  Ha
b680: 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20  sh aModule;     
b690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
b6a0: 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69  opulated by sqli
b6b0: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
b6c0: 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78  e() */.  VtabCtx
b6d0: 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20   *pVtabCtx;     
b6e0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
b6f0: 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61  t for active vta
b700: 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65  b connect/create
b710: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61   */.  VTable **a
b720: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
b730: 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74      /* Virtual t
b740: 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20  ables with open 
b750: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a  transactions */.
b760: 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f    VTable *pDisco
b770: 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73  nnect;    /* Dis
b780: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
b790: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
b7a0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
b7b0: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
b7e0: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
b7f0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
b800: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
b810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
b820: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
b830: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
b840: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
b850: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
b860: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
b870: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b890: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
b8a0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
b8b0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
b8c0: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
b8d0: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
b8e0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
b8f0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
b900: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
b910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
b920: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
b930: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
b940: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b960: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
b970: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
b980: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
b990: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
b9a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b9b0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
b9c0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
b9d0: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
b9e0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
b9f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
ba00: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
ba10: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
ba20: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
ba30: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
ba40: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
ba50: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
ba60: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
ba70: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
ba80: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
ba90: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
baa0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
bab0: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
bac0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
bad0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
bae0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
baf0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
bb00: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
bb10: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
bb20: 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74  _MASTER.  ** mut
bb30: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
bb40: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
bb50: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
bb60: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a  in notify.c..  *
bb70: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
bb80: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
bb90: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
bba0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
bbb0: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
bbc0: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
bbd0: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
bbe0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
bbf0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
bc00: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
bc10: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
bc20: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
bc30: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
bc40: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
bc50: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
bc60: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
bc70: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
bc80: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
bc90: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
bca0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
bcb0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
bcc0: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
bcd0: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
bce0: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
bcf0: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
bd00: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
bd10: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
bd20: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
bd30: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd50: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
bd60: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
bd70: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
bd80: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
bd90: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
bda0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
bdb0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
bdc0: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
bdd0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
bde0: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
bdf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
be00: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
be10: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
be20: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
be30: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
be40: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
be50: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
be60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
be70: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
be80: 49 54 45 5f 53 43 48 45 4d 41 5f 4c 49 4e 54 0a  ITE_SCHEMA_LINT.
be90: 20 20 76 6f 69 64 20 28 2a 78 57 68 65 72 65 49    void (*xWhereI
bea0: 6e 66 6f 29 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  nfo)(void*, int,
beb0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
bec0: 74 2c 20 69 36 34 29 3b 0a 20 20 76 6f 69 64 20  t, i64);.  void 
bed0: 2a 70 57 68 65 72 65 49 6e 66 6f 43 74 78 3b 0a  *pWhereInfoCtx;.
bee0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
bef0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
bf00: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
bf10: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
bf20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
bf30: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
bf40: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
bf50: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
bf60: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
bf70: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
bf80: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
bf90: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
bfa0: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
bfb0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
bfc0: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
bfd0: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
bfe0: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
bff0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c000: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
c010: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
c020: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
c030: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
c040: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
c050: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
c060: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
c070: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
c080: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
c090: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
c0a0: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
c0b0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
c0c0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
c0d0: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
c0e0: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
c0f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
c100: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
c110: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
c120: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
c130: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c140: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
c150: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
c160: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
c170: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
c180: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
c190: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
c1a0: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
c1b0: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
c1c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c1d0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
c1e0: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
c1f0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
c200: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
c210: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c240: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
c250: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
c260: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
c290: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
c2a0: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
c2b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
c2c0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
c2d0: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
c2e0: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
c2f0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
c330: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
c340: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
c350: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
c360: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
c370: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
c380: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
c390: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c3a0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
c3b0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
c3c0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
c3d0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
c3e0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c3f0: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
c400: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
c410: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
c420: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
c430: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
c440: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
c450: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
c460: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
c470: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
c480: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
c490: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
c4a0: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
c4b0: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
c4c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
c4d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
c4e0: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
c4f0: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
c500: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
c510: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
c520: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
c530: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
c540: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
c550: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
c560: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
c570: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
c580: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
c590: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
c5a0: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
c5b0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
c5c0: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
c5d0: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
c5e0: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
c5f0: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
c600: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
c610: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
c620: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
c630: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
c640: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c650: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
c660: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
c670: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
c680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
c690: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c6a0: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
c6b0: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
c6c0: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
c6d0: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
c6e0: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
c6f0: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
c700: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
c710: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
c720: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
c730: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
c740: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
c750: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
c760: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
c770: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
c780: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
c790: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
c7a0: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
c7b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c7c0: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
c7d0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
c7e0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
c7f0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
c800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
c810: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
c820: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
c830: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
c840: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
c850: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
c860: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
c870: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
c880: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
c890: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
c8a0: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
c8b0: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  08000000  /* Cur
c8c0: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
c8d0: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
c8e0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
c8f0: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
c900: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
c910: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
c920: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c930: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
c940: 72 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f  r  0x20000000  /
c950: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
c960: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 0a 0a  kenizer(2) */...
c970: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
c980: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
c990: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
c9a0: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
c9b0: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
c9c0: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
c9d0: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
c9e0: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
c9f0: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
ca00: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
ca10: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
ca20: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
ca30: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
ca40: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
ca50: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
ca60: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
ca70: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
ca80: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
ca90: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
caa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cab0: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
cac0: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
cad0: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
cae0: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
caf0: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
cb00: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
cb10: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
cb20: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
cb30: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
cb40: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
cb50: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
cb60: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
cb70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
cb80: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
cb90: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
cba0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
cbb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cbc0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
cbd0: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
cbe0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
cbf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cc00: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
cc10: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
cc20: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
cc30: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
cc40: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
cc50: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
cc60: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
cc70: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
cc80: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
cc90: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
cca0: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
ccb0: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
ccc0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
ccd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
cce0: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
ccf0: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
cd00: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
cd10: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
cd20: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
cd30: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
cd40: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
cd50: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
cd60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
cd70: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30 30  orHints    0x200
cd80: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
cd90: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
cda0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cdb0: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
cdc0: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
cdd0: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
cde0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
cdf0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
ce00: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
ce10: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
ce20: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
ce30: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
ce40: 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
ce50: 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f  N_TEST.#define O
ce60: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
ce70: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
ce80: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
ce90: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
cea0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
ceb0: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
cec0: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
ced0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
cee0: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69  ==0).#else.#defi
cef0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
cf00: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
cf10: 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74  )  0.#define Opt
cf20: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
cf30: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23  (db, mask)   1.#
cf40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
cf50: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
cf60: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
cf70: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
cf80: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
cf90: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
cfa0: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
cfb0: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
cfc0: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
cfd0: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
cfe0: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
cff0: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
d000: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
d010: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
d020: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
d030: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
d040: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
d050: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
d060: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
d070: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
d080: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
d090: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
d0a0: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
d0b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d0c0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
d0d0: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
d0e0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
d0f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d100: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
d110: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
d120: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
d130: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
d140: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
d150: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
d160: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
d170: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
d180: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
d190: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
d1a0: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
d1b0: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
d1c0: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
d1d0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
d1e0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
d1f0: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
d200: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
d210: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
d220: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
d230: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
d240: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
d250: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
d260: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
d270: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
d280: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
d290: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
d2a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
d2b0: 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
d2c0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20  global built-in 
d2d0: 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73  functions (ex: s
d2e0: 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20  ubstr(), max(), 
d2f0: 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f  count()).** a po
d300: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
d310: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
d320: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75  in the sqlite3Bu
d330: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f  iltinFunctions o
d340: 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65  bject..** For pe
d350: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
d360: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
d370: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f   functions, a po
d380: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a  inter to this.**
d390: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
d3a0: 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48  ld in the db->aH
d3b0: 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  ash hash table..
d3c0: 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73  **.** The u.pHas
d3d0: 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  h field is used 
d3e0: 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75  by the global bu
d3f0: 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e  ilt-ins.  The u.
d400: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66  pDestructor.** f
d410: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
d420: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
d430: 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73  pp-def functions
d440: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
d450: 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b  Def {.  i8 nArg;
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d470: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
d480: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
d490: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
d4a0: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
d4b0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
d4c0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
d4d0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
d4e0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
d4f0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
d500: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
d510: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
d520: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
d530: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
d540: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
d550: 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  SFunc)(sqlite3_c
d560: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
d570: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
d580: 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65   func or agg-ste
d590: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
d5a0: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
d5b0: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d5d0: 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  Agg finalizer */
d5e0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
d5f0: 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e  Name;   /* SQL n
d600: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
d610: 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ion. */.  union 
d620: 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  {.    FuncDef *p
d630: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
d640: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
d650: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
d660: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
d670: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
d680: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
d690: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
d6a0: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
d6b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d   function */.  }
d6c0: 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   u;.};../*.** Th
d6d0: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
d6e0: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
d6f0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
d700: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
d710: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
d720: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
d730: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
d740: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
d750: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
d760: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
d770: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
d780: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
d790: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
d7a0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
d7b0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
d7c0: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
d7d0: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
d7e0: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a  .nRef is set to.
d7f0: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
d800: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
d810: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
d820: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
d830: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
d840: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
d850: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
d860: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
d870: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
d880: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
d890: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
d8a0: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
d8b0: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
d8c0: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
d8d0: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
d8e0: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
d8f0: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
d900: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
d910: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
d920: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
d930: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
d940: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
d950: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
d960: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
d970: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
d980: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
d990: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
d9a0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
d9b0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
d9c0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
d9d0: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
d9e0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
d9f0: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
da00: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
da10: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
da20: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
da30: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
da40: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
da50: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
da60: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
da70: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
da80: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
da90: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41  AG_TYPEOFARG.  A
daa0: 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
dab0: 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20  C_CONSTANT must 
dac0: 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53  be the same as S
dad0: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
dae0: 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  TIC.  There.** a
daf0: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
db00: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
db10: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
db20: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
db30: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
db40: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
db50: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
db60: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
db70: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
db80: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
db90: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
dba0: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
dbb0: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
dbc0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
dbd0: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
dbe0: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
dbf0: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
dc00: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
dc10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc20: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
dc30: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
dc40: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
dc50: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
dc60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dc70: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
dc80: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
dc90: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
dca0: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
dcb0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
dcc0: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
dcd0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
dce0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
dcf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
dd00: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
dd10: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
dd20: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
dd30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dd40: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
dd50: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
dd60: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
dd70: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
dd80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
dd90: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
dda0: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
ddb0: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
ddc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ddd0: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
dde0: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
ddf0: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
de00: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
de10: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
de20: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
de30: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
de40: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
de50: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
de60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
de70: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
de80: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
de90: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
dea0: 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
deb0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
dec0: 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
ded0: 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
dee0: 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
def0: 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
df20: 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
df30: 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
df40: 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ime */../*.** Th
df50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
df60: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
df70: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
df80: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
df90: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
dfa0: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
dfb0: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
dfc0: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
dfd0: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
dfe0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
dff0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
e000: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
e010: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
e020: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
e030: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
e040: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
e050: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
e060: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
e070: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
e080: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
e090: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
e0a0: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
e0b0: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
e0c0: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
e0d0: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
e0e0: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
e0f0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
e100: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
e110: 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20  ction. If.**    
e120: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
e130: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
e140: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
e150: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
e160: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
e170: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
e180: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
e190: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
e1a0: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
e1b0: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
e1c0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
e1d0: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44   flag..**.**   D
e1e0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
e1f0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e200: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
e210: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
e220: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
e230: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
e240: 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a  STANT flag and.*
e250: 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53  *     adds the S
e260: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
e270: 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66  NG flag.  Used f
e280: 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66  or date & time f
e290: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20  unctions.**     
e2a0: 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69  and functions li
e2b0: 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  ke sqlite_versio
e2c0: 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61  n() that can cha
e2d0: 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72  nge, but not dur
e2e0: 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e  ing.**     a sin
e2f0: 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  gle query..**.**
e300: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
e310: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
e320: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
e330: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
e340: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
e350: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
e360: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
e370: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
e380: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
e390: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
e3a0: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
e3b0: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
e3c0: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
e3d0: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
e3e0: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
e3f0: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
e400: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
e410: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
e420: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
e430: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
e440: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
e450: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
e460: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
e470: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
e480: 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61  zName.**     tha
e490: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
e4a0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
e4b0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
e4c0: 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20   call to C.**   
e4d0: 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
e4e0: 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
e4f0: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
e500: 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
e510: 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
e520: 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
e530: 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
e540: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
e550: 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
e560: 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
e570: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
e580: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
e590: 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
e5a0: 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
e5b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
e5c0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
e5d0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
e5e0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
e5f0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e600: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
e610: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
e620: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
e630: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e640: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
e650: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
e660: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e  } }.#define VFUN
e670: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
e680: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
e690: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
e6a0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
e6b0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e6c0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
e6d0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
e6e0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
e6f0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
e700: 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49  .#define DFUNCTI
e710: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
e720: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
e730: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
e740: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
e750: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
e760: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
e770: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
e780: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
e790: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
e7a0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
e7b0: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
e7c0: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
e7d0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
e7e0: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
e7f0: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
e800: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
e810: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
e820: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
e830: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
e840: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
e850: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
e860: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
e870: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
e880: 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
e890: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
e8a0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
e8b0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
e8c0: 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
e8d0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
e8e0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
e8f0: 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
e900: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
e910: 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49  me, }.#define LI
e920: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
e930: 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
e940: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
e950: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
e960: 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
e970: 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
e980: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
e990: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
e9a0: 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45   }.#define AGGRE
e9b0: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
e9c0: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
e9d0: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
e9e0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
e9f0: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
ea00: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
ea10: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
ea20: 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
ea30: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
ea40: 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47   {0}}.#define AG
ea50: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
ea60: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
ea70: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
ea80: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
ea90: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
eaa0: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
eab0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
eac0: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
ead0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
eae0: 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
eaf0: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  nal,#zName, {0}}
eb00: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
eb10: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
eb20: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
eb30: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
eb40: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
eb50: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
eb60: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
eb70: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
eb80: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
eb90: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
eba0: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
ebb0: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
ebc0: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
ebd0: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
ebe0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
ebf0: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
ec00: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
ec10: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ec30: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
ec40: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
ec50: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
ec60: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
ec70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ec80: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
ec90: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
eca0: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
ecb0: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
ecc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ecd0: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
ece0: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
ecf0: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
ed10: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
ed20: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
ed30: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
ed40: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
ed50: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
ed60: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
ed70: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
ed80: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
ed90: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
eda0: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
edb0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
edc0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
edd0: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
ede0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
edf0: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
ee00: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
ee10: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
ee20: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
ee30: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
ee40: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
ee50: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
ee60: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ee70: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
ee80: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
ee90: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
eea0: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
eeb0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
eec0: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
eed0: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
eee0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
eef0: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
ef00: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
ef10: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ef30: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
ef40: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
ef50: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef70: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
ef80: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
ef90: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
efa0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
efb0: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
efc0: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
efd0: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
efe0: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
eff0: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
f000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
f010: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
f020: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
f030: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
f040: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
f050: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
f060: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
f070: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
f080: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
f090: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
f0a0: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
f0b0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
f0c0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
f0d0: 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20  umn, \000, then 
f0e0: 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78  the type */.  Ex
f0f0: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
f100: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
f110: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
f120: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
f130: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
f140: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
f150: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
f160: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
f170: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
f180: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
f190: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
f1a0: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
f1b0: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
f1c0: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
f1d0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
f1e0: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
f1f0: 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
f200: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
f210: 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73  of value in this
f220: 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28   column. sizeof(
f230: 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20  INT)==1 */.  u8 
f240: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
f250: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
f260: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
f270: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
f280: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
f290: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
f2a0: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
f2b0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
f2c0: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
f2d0: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
f2e0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
f2f0: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
f300: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
f310: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
f320: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
f330: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
f340: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
f350: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
f360: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
f370: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
f380: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
f390: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
f3a0: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
f3b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
f3c0: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
f3d0: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
f3e0: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
f3f0: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
f400: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
f410: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
f420: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
f430: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
f440: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
f450: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
f460: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
f470: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
f480: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
f490: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
f4a0: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
f4b0: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
f4c0: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
f4d0: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
f4e0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
f4f0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
f500: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
f510: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
f520: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
f530: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
f540: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
f550: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
f560: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
f570: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
f580: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
f590: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
f5a0: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
f5b0: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
f5c0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
f5d0: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
f5e0: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
f5f0: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
f600: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
f610: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
f620: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
f630: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
f640: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
f650: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
f660: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
f670: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f680: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
f690: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
f6a0: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
f6b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f6c0: 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
f6d0: 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
f6e0: 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
f6f0: 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
f700: 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
f710: 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
f720: 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
f730: 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
f740: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
f750: 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
f760: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
f770: 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
f780: 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
f790: 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
f7a0: 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
f7b0: 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
f7c0: 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
f7d0: 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
f7e0: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
f7f0: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
f800: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
f810: 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
f820: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
f830: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
f840: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
f850: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
f860: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
f870: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
f880: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
f890: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
f8a0: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
f8b0: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
f8c0: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
f8d0: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
f8e0: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
f8f0: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
f900: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
f910: 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
f920: 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
f930: 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
f940: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
f950: 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
f960: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
f970: 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
f980: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f990: 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
f9a0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
f9b0: 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
f9c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
f9d0: 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
f9e0: 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
f9f0: 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
fa00: 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
fa10: 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
fa20: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
fa30: 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
fa40: 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
fa50: 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
fa60: 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
fa70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
fa80: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
fa90: 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
faa0: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
fab0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
fac0: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
fad0: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
fae0: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
faf0: 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
fb00: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
fb10: 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
fb20: 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
fb30: 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
fb40: 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
fb50: 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
fb60: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
fb70: 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
fb80: 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
fb90: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
fba0: 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
fbb0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
fbc0: 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
fbd0: 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
fbe0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
fbf0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
fc00: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
fc10: 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
fc20: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
fc30: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
fc40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fc50: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
fc60: 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
fc70: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
fc80: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
fc90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fca0: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
fcb0: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
fcc0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
fcd0: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
fce0: 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
fcf0: 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
fd00: 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
fd10: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
fd20: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
fd30: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
fd40: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
fd50: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
fd60: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
fd70: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
fd80: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
fd90: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
fda0: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
fdb0: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
fdc0: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
fdd0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
fde0: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
fdf0: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
fe00: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
fe10: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
fe20: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
fe30: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
fe40: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
fe50: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
fe60: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
fe70: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
fe80: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
fe90: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a  virtual table.**
fea0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
feb0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
fec0: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
fed0: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
fee0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
fef0: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
ff00: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
ff10: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
ff20: 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61  tabase.** schema
ff30: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
ff40: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
ff50: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
ff60: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
ff70: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
ff80: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
ff90: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
ffa0: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
ffb0: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
ffc0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
ffd0: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
ffe0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
fff0: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
10000 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
10010 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
10020 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
10030 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
10040 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69   tables.** withi
10050 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
10060 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
10070 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
10080 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72  he callers.** tr
10090 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
100a0 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
100b0 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
100c0 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a  e same database.
100d0 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
100e0 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
100f0 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
10100 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
10110 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
10120 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
10130 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
10140 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
10150 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
10160 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
10170 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
10180 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
10190 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
101a0 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
101b0 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
101c0 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
101d0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
101e0 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
101f0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
10200 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
10210 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
10220 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
10230 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
10240 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
10250 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
10260 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
10270 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
10280 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
10290 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
102a0 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
102b0 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
102c0 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
102d0 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
102e0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
102f0 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
10300 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
10310 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
10320 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
10330 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
10340 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
10350 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
10360 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
10370 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
10380 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64  t.** deleted and
10390 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
103a0 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
103b0 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
103c0 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ed.** immediatel
103d0 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
103e0 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
103f0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
10400 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
10410 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
10420 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
10430 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
10440 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
10450 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
10460 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
10470 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
10480 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
10490 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74  onnected.** next
104a0 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
104b0 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
104c0 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
104d0 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
104e0 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
104f0 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
10500 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
10510 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
10520 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
10530 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
10540 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
10550 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
10560 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
10570 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
10580 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
10590 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
105a0 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
105b0 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
105c0 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
105d0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
105e0 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
105f0 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
10600 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
10610 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
10620 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
10630 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ted by.** sqlite
10640 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
10650 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
10660 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
10670 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a  in VTable.db as.
10680 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
10690 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
106a0 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
106b0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
106c0 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
106d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
106e0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
106f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
10700 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
10710 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10720 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
10730 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
10740 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
10750 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
10760 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
10770 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
10780 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
10790 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
107a0 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
107b0 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
107c0 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
107d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
107e0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
107f0 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
10800 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
10810 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
10820 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
10830 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
10840 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
10850 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
10860 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
10870 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
10880 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
10890 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
108a0 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64  ch SQL table and
108b0 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65   view is represe
108c0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
108d0 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  * by an instance
108e0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
108f0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
10900 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
10910 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10920 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10930 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
10940 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
10950 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
10960 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
10970 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
10980 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
10990 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
109a0 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
109b0 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
109c0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
109d0 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
109e0 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
109f0 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
10a00 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
10a10 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
10a20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
10a30 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
10a40 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
10a50 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
10a60 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
10a70 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
10a80 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
10a90 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
10aa0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
10ab0 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
10ac0 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
10ad0 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nts */.         
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10af0 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64     ... also used
10b00 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20   as column name 
10b10 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a  list in a VIEW *
10b20 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
10b30 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
10b40 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
10b50 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
10b60 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
10b70 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
10b80 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
10b90 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
10ba0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
10bb0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
10bc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10bd0 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
10be0 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
10bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10c00 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
10c10 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
10c20 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f   */.  LogEst nRo
10c30 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73  wLogEst;   /* Es
10c40 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
10c50 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
10c60 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
10c70 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
10c80 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
10c90 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
10ca0 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
10cb0 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66   bytes */.#ifdef
10cc0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
10cd0 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74  OSTMULT.  LogEst
10ce0 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f   costMult;     /
10cf0 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65  * Cost multiplie
10d00 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73  r for using this
10d10 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
10d20 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
10d30 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
10d40 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
10d50 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
10d60 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
10d70 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
10d80 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
10d90 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
10da0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
10db0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
10dc0 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
10dd0 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
10de0 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
10df0 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
10e00 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
10e10 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
10e20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
10e30 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
10e40 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
10e50 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
10e60 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
10e70 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
10e80 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30  ModuleArg;  /* 0
10e90 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65  : module 1: sche
10ea0 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20  ma 2: vtab name 
10eb0 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20  3...: args */.  
10ec0 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
10ed0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
10ee0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
10ef0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
10f00 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
10f10 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
10f20 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
10f30 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
10f40 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
10f50 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
10f60 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
10f70 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
10f80 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
10f90 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
10fa0 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
10fb0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
10fc0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
10fd0 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
10fe0 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
10ff0 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
11000 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20   tables or view 
11010 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
11020 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
11030 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
11040 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
11050 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
11060 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
11070 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
11080 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
11090 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
110a0 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
110b0 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
110c0 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
110d0 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
110e0 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
110f0 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
11100 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
11110 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
11120 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
11130 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
11140 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
11150 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
11160 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
11170 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
11180 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
11190 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
111a0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
111b0 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
111c0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
111d0 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
111e0 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
111f0 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
11200 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
11210 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
11220 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
11230 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
11240 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
11250 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
11260 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
11270 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
11280 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
11290 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
112a0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30  outRowid    0x20
112b0 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
112c0 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
112d0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
112e0 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
112f0 52 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f  Rowid  0x40    /
11300 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
11310 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
11320 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
11330 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
11340 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  x80    /* Out-of
11350 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
11360 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  lumns */.../*.**
11370 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
11380 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
11390 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
113a0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
113b0 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
113c0 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
113d0 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
113e0 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
113f0 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
11400 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
11410 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
11420 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11430 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
11440 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
11450 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
11460 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
11470 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
11480 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
11490 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
114a0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
114b0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
114c0 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
114d0 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
114e0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
114f0 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
11500 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
11510 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
11520 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
11530 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
11540 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
11550 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
11560 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
11570 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
11580 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
11590 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
115a0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
115b0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
115c0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
115d0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
115e0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
115f0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
11600 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
11610 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
11620 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
11630 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
11640 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
11650 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
11660 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
11670 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
11680 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
11690 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
116a0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
116b0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
116c0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
116d0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
116e0 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
116f0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
11700 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
11710 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
11720 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
11730 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
11740 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
11750 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
11760 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
11770 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
11780 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
11790 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
117a0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
117b0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
117c0 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
117d0 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
117e0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
117f0 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
11800 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
11810 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
11820 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
11830 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11840 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11850 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
11860 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
11870 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
11880 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
11890 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
118a0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
118b0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
118c0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
118d0 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
118e0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
118f0 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
11900 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
11910 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
11920 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
11930 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
11940 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
11950 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
11960 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
11970 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
11980 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
11990 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
119a0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
119b0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
119c0 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
119d0 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
119e0 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
119f0 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
11a00 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
11a10 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
11a20 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
11a30 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
11a40 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
11a50 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
11a60 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
11a70 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
11a80 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
11a90 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
11aa0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11ab0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11ac0 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
11ad0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
11ae0 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
11af0 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
11b00 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
11b10 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
11b20 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
11b30 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
11b40 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
11b50 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
11b60 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
11b70 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
11b80 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
11b90 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
11ba0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
11bb0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
11bc0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
11bd0 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
11be0 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
11bf0 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
11c00 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
11c10 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
11c20 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
11c30 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
11c40 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
11c50 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
11c60 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
11c70 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
11c80 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
11c90 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
11ca0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
11cb0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
11cc0 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
11cd0 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
11ce0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11cf0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
11d00 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
11d10 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
11d20 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
11d30 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
11d40 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
11d50 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
11d60 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
11d70 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
11d80 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
11d90 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
11da0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
11db0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11dc0 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
11dd0 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
11de0 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
11df0 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
11e00 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
11e10 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
11e20 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
11e30 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
11e40 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
11e50 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
11e60 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
11e70 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
11e80 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
11e90 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
11ea0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
11eb0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
11ec0 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
11ed0 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
11ee0 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
11ef0 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
11f00 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
11f10 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
11f20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
11f30 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
11f40 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
11f50 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
11f60 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
11f70 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
11f80 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
11f90 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
11fa0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
11fb0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
11fc0 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
11fd0 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
11fe0 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
11ff0 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
12000 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
12010 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
12020 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
12030 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
12040 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
12050 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
12060 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
12070 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
12080 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
12090 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
120a0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
120b0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
120c0 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
120d0 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
120e0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
120f0 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
12100 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
12110 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
12120 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
12130 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
12140 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
12150 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
12160 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
12170 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
12180 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
12190 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
121a0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
121b0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
121c0 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
121d0 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
121e0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
121f0 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
12200 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
12210 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
12220 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
12230 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
12240 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
12250 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
12260 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
12270 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
12280 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
12290 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
122a0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
122b0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
122c0 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
122d0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
122e0 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
122f0 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
12300 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
12310 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
12320 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
12330 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
12340 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
12350 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
12360 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
12370 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
12380 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
12390 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
123a0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
123b0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
123c0 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
123d0 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
123e0 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
123f0 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
12400 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
12410 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
12420 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
12430 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
12440 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
12450 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
12460 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
12470 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
12480 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
12490 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
124a0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
124b0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
124c0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
124d0 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
124e0 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
124f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
12500 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
12510 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
12520 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
12530 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
12540 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
12550 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
12560 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
12570 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
12580 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
12590 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
125a0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
125b0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
125c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
125d0 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
125e0 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
125f0 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
12600 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
12610 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
12620 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
12630 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
12640 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
12650 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
12660 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
12670 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
12680 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
12690 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
126a0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
126b0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
126c0 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
126d0 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
126e0 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
126f0 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
12700 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
12710 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
12720 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
12730 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
12740 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
12750 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
12760 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
12770 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
12780 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
12790 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
127a0 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
127b0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
127c0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
127d0 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
127e0 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
127f0 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
12800 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
12810 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
12820 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
12830 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
12840 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
12850 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
12860 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
12870 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
12880 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
12890 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
128a0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
128b0 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
128c0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
128d0 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
128e0 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
128f0 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
12900 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
12910 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
12920 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
12930 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
12940 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
12950 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
12960 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
12970 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
12980 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
12990 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
129a0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
129b0 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
129c0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
129d0 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
129e0 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
129f0 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
12a00 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
12a10 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
12a20 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
12a30 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
12a40 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
12a50 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
12a60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
12a70 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
12a80 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
12a90 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
12aa0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12ab0 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
12ac0 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
12ad0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
12ae0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
12af0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
12b00 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
12b10 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
12b20 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
12b30 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
12b40 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
12b50 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
12b60 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
12b70 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
12b80 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
12b90 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
12ba0 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
12bb0 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
12bc0 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
12bd0 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
12be0 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
12bf0 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
12c00 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
12c10 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
12c20 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
12c30 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
12c40 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
12c50 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
12c60 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
12c70 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
12c80 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
12c90 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
12ca0 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
12cb0 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
12cc0 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
12cd0 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
12ce0 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
12cf0 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
12d00 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
12d10 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
12d20 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
12d30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
12d40 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
12d50 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
12d60 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
12d70 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
12d80 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
12d90 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
12da0 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
12db0 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
12dc0 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
12dd0 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
12de0 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
12df0 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
12e00 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
12e10 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
12e20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
12e30 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
12e40 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
12e50 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
12e60 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
12e70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
12e80 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
12e90 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
12ea0 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
12eb0 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
12ec0 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
12ed0 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
12ee0 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
12ef0 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
12f00 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
12f10 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
12f20 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
12f30 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
12f40 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
12f50 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
12f60 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
12f70 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
12f80 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
12f90 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
12fa0 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
12fb0 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
12fc0 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
12fd0 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
12fe0 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
12ff0 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
13000 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
13010 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
13020 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
13030 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
13040 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
13050 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
13060 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
13070 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
13080 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
13090 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
130a0 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
130b0 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
130c0 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
130d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
130e0 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
130f0 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
13100 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
13110 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
13120 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
13130 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
13140 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
13150 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
13160 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
13170 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
13180 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
13190 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
131a0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
131b0 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
131c0 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
131d0 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
131e0 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
131f0 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
13200 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
13210 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
13220 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
13230 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
13240 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
13250 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
13260 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
13270 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
13280 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
13290 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
132a0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
132b0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
132c0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
132d0 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
132e0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
132f0 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
13300 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
13310 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
13320 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
13330 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
13340 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
13350 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
13360 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
13370 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
13380 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
13390 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
133a0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
133b0 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
133c0 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  > rhs) */.  i8 r
133d0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
133e0 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
133f0 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
13400 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
13410 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
13420 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
13430 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
13440 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
13450 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
13460 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
13470 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
13480 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
13490 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
134a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
134b0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
134c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
134d0 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
134e0 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
134f0 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
13500 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
13510 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
13520 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
13530 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
13540 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
13550 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
13560 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
13570 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
13580 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
13590 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
135a0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
135b0 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
135c0 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
135d0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
135e0 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
135f0 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
13600 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
13610 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
13620 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
13630 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
13640 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
13650 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
13660 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
13670 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
13680 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
13690 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
136a0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
136b0 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
136c0 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
136d0 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
136e0 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
136f0 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
13700 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
13710 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
13720 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
13730 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
13740 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
13750 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
13760 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
13770 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
13780 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
13790 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
137a0 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
137b0 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
137c0 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
137d0 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
137e0 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
137f0 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
13800 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
13810 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
13820 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
13830 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
13840 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
13850 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
13860 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
13870 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
13880 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
13890 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
138a0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
138b0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
138c0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
138d0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
138e0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
138f0 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
13900 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
13910 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
13920 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
13930 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
13940 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
13950 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
13960 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
13970 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
13980 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
13990 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
139a0 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
139b0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
139c0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
139d0 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
139e0 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
139f0 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
13a00 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
13a10 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
13a20 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
13a30 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
13a40 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
13a50 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
13a60 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
13a70 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
13a80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
13a90 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
13aa0 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
13ab0 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
13ac0 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
13ad0 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
13ae0 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
13af0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
13b00 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
13b10 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
13b20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
13b30 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
13b40 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
13b50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
13b60 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
13b70 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
13b80 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
13b90 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
13ba0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
13bb0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
13bc0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
13bd0 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
13be0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
13bf0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
13c00 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
13c10 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
13c20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
13c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
13c40 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
13c50 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
13c60 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
13c70 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
13c80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
13c90 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
13ca0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
13cb0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
13cc0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
13cd0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
13ce0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
13cf0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
13d00 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
13d10 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
13d20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
13d30 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
13d40 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
13d50 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
13d60 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
13d70 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
13d80 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
13d90 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
13da0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
13db0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
13dc0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
13dd0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
13de0 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
13df0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
13e00 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
13e30 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
13e40 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
13e50 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
13e60 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
13e70 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
13e80 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
13e90 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13eb0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13ec0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
13ed0 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
13ee0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
13ef0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13f00 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
13f10 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
13f20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
13f30 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
13f40 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
13f50 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
13f60 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
13f70 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
13f80 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
13f90 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
13fa0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
13fb0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
13fc0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
13fd0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
13fe0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
13ff0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
14000 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
14010 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
14020 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
14030 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
14040 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
14050 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
14060 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
14070 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
14080 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
14090 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
140a0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
140b0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
140c0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
140d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
140e0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
140f0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
14100 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
14110 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
14120 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
14130 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
14140 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
14150 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14160 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
14170 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
14180 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
14190 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
141a0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
141b0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
141c0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
141d0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
141e0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
141f0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
14200 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
14210 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
14220 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
14230 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
14240 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
14250 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14260 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
14270 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
14280 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
14290 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
142a0 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
142b0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
142c0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
142d0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
142e0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
142f0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
14300 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
14310 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
14320 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
14330 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
14340 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
14350 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
14360 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
14370 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
14380 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
14390 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
143a0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
143b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
143c0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
143d0 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
143e0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
143f0 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
14400 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
14410 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
14420 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
14430 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
14440 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
14450 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
14460 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
14470 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
14480 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
14490 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
144a0 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
144b0 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
144c0 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
144d0 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
144e0 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e  None)../* The In
144f0 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76  dex.aiColumn[] v
14500 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c  alues are normal
14510 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ly positive inte
14520 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65  ger.  But.** the
14530 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61  re are some nega
14540 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74  tive values that
14550 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65   have special me
14560 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e  aning:.*/.#defin
14570 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28  e XN_ROWID     (
14580 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -1)     /* Index
14590 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ed column is the
145a0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
145b0 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28  e XN_EXPR      (
145c0 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -2)     /* Index
145d0 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  ed column is an 
145e0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f  expression */../
145f0 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
14600 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
14610 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
14620 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
14630 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73   in memory.** us
14640 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
14650 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
14660 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
14670 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
14680 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
14690 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
146a0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
146b0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
146c0 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
146d0 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
146e0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
146f0 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
14700 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
14710 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
14720 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
14730 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
14740 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
14750 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
14760 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
14770 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
14780 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
14790 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
147a0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
147b0 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
147c0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
147d0 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
147e0 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
147f0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
14800 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
14810 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
14820 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
14830 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
14840 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
14850 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
14860 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
14870 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
14880 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
14890 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
148a0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
148b0 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
148c0 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
148d0 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
148e0 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
148f0 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
14900 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
14910 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
14920 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
14930 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
14940 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
14950 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
14960 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
14970 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
14980 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
14990 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
149a0 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
149b0 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
149c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
149d0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
149e0 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
149f0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
14a00 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
14a10 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
14a20 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
14a30 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
14a40 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
14a50 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
14a60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
14a70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
14a80 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
14a90 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
14aa0 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
14ab0 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
14ac0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
14ad0 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
14ae0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
14af0 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
14b00 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
14b10 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
14b20 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
14b30 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
14b40 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
14b50 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
14b60 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
14b70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
14b80 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
14b90 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
14ba0 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
14bb0 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
14bc0 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
14bd0 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
14be0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
14bf0 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
14c00 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
14c10 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
14c20 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
14c30 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
14c40 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
14c50 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
14c60 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
14c70 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
14c80 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
14c90 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
14cc0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
14cd0 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
14ce0 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
14cf0 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
14d00 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
14d10 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
14d20 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
14d30 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
14d60 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
14d70 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
14d80 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
14d90 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
14da0 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
14db0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
14dc0 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
14dd0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
14de0 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
14df0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
14e00 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
14e10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
14e20 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
14e30 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
14e40 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
14e50 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
14e60 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
14e70 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
14e80 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
14e90 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
14ea0 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
14eb0 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
14ec0 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
14ed0 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
14ee0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
14ef0 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
14f00 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
14f10 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
14f20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
14f30 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
14f40 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
14f50 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
14f60 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
14f70 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
14f80 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
14f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
14fa0 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
14fb0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
14fc0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
14fd0 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
14fe0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
14ff0 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
15000 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
15010 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
15020 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
15030 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
15040 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
15050 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
15060 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15070 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
15080 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
15090 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
150a0 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
150b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
150c0 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
150d0 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
150e0 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
150f0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
15100 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
15110 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
15120 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
15150 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
15160 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
15170 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
151a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
151b0 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
151c0 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
151d0 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
151e0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
151f0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
15200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
15210 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
15220 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
15230 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
15240 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
15250 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
15260 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
15270 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
15280 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
15290 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
152a0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
152b0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
152c0 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
152d0 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
152e0 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
152f0 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
15300 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
15310 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
15320 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
15330 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15340 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
15350 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
15360 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
15370 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
15380 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
15390 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
153a0 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
153b0 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
153c0 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
153d0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
153e0 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
153f0 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
15400 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
15410 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
15420 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
15430 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
15440 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
15450 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
15460 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
15470 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
15480 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
15490 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
154a0 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
154b0 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
154c0 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
154d0 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
154e0 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
154f0 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
15500 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
15510 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
15520 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
15530 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
15540 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
15550 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
15560 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
15570 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
15580 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
15590 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
155a0 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
155b0 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
155c0 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
155d0 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
155e0 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
155f0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
15600 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
15610 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
15620 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15630 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
15640 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
15650 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
15660 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
15670 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
15680 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
15690 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
156a0 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
156b0 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
156c0 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
156d0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
156e0 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
156f0 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
15700 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
15710 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
15720 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
15730 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
15740 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
15750 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
15760 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
15770 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15780 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
15790 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
157a0 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20   TK_BLOB,.** or 
157b0 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
157c0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
157d0 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
157e0 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
157f0 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
15800 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
15810 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
15820 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
15830 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
15840 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
15850 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
15860 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15870 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
15880 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
15890 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
158a0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
158b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
158c0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
158d0 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
158e0 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
158f0 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
15900 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
15910 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
15920 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
15930 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
15940 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
15950 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
15960 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
15970 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15980 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
15990 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
159a0 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
159b0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
159c0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
159d0 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
159e0 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
159f0 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
15a00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
15a10 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
15a20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
15a30 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
15a40 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
15a50 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
15a60 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
15a70 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
15a80 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
15a90 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
15aa0 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
15ab0 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
15ac0 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69  pList is.** vali
15ad0 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
15ae0 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
15af0 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
15b00 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
15b10 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
15b20 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
15b30 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
15b40 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
15b50 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
15b60 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
15b70 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
15b80 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
15b90 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
15ba0 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
15bb0 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
15bc0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
15bd0 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
15be0 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
15bf0 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
15c00 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
15c10 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
15c20 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
15c30 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
15c40 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
15c50 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
15c60 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
15c70 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
15c80 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
15c90 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
15ca0 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
15cb0 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
15cc0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
15cd0 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
15ce0 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
15cf0 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
15d00 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
15d10 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
15d20 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
15d30 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
15d40 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e  s the index.** n
15d50 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
15d60 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
15d70 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15d80 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
15d90 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
15da0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
15db0 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
15dc0 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
15dd0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
15de0 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
15df0 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
15e00 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
15e10 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
15e20 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
15e30 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
15e40 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
15e50 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
15e60 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
15e70 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
15e80 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
15e90 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
15ea0 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
15eb0 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
15ec0 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
15ed0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
15ee0 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
15ef0 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
15f00 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
15f10 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
15f20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
15f30 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
15f40 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
15f50 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
15f60 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
15f70 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
15f80 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
15f90 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
15fa0 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
15fb0 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
15fc0 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
15fd0 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
15fe0 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
15ff0 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
16000 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
16010 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
16020 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
16030 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
16040 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
16050 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
16060 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
16070 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
16080 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
16090 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
160a0 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
160b0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
160c0 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
160d0 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
160e0 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
160f0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
16100 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
16110 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
16120 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
16130 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
16140 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
16150 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
16160 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
16170 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
16180 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
16190 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
161a0 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
161b0 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
161c0 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
161d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
161e0 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
161f0 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
16200 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
16210 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
16220 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
16230 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
16240 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
16250 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
16260 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
16270 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
16280 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
16290 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
162a0 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
162b0 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
162c0 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
162d0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
162e0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
162f0 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
16300 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
16310 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
16320 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
16330 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
16340 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
16350 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
16360 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
16370 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
16380 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
16390 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
163a0 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
163b0 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
163c0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
163d0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
163e0 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
163f0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
16400 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
16410 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
16420 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
16430 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
16440 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
16450 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
16460 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
16470 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
16480 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
16490 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
164a0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
164b0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
164c0 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
164d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
164e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
164f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
16510 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
16520 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
16530 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
16540 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
16550 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
16560 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
16570 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
16580 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
16590 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
165a0 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
165b0 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
165c0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
165d0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
165e0 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
165f0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
16600 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
16610 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
16620 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
16630 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
16640 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
16650 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
16660 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
16670 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
16680 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
16690 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
166a0 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
166b0 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
166c0 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
166d0 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
166e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
166f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
16720 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
16730 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
16740 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
16750 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
16760 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
16770 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
16780 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
16790 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
167a0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
167b0 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
167c0 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
167d0 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
16800 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
16810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16820 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
16830 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
16840 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
16870 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20  ely:  134217728 
16880 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64  times likelihood
16890 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
168a0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
168b0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
168c0 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
168d0 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
16900 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
16910 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20   (always >= 1). 
16920 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
16930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
16940 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
16950 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
16960 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
16970 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
16980 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
16990 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
169a0 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
169b0 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
169c0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
169d0 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
169e0 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
169f0 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
16a20 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
16a30 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
16a40 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
16a50 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
16a60 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
16a70 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
16a80 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
16a90 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
16aa0 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
16ab0 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
16ac0 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65  CTION */.  Table
16ad0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
16ae0 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54    /* Table for T
16af0 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73  K_COLUMN express
16b00 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ions. */.};../*.
16b10 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16b20 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
16b30 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
16b40 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
16b50 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
16b60 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30  _FromJoin  0x000
16b70 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  001 /* Originate
16b80 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c  s in ON/USING cl
16b90 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f  ause of outer jo
16ba0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
16bb0 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
16bc0 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
16bd0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
16be0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
16bf0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
16c00 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
16c10 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
16c20 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
16c30 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
16c40 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
16c50 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
16c60 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
16c70 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
16c80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
16c90 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
16ca0 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
16cb0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
16cc0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
16cd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
16ce0 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
16cf0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
16d00 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
16d10 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
16d20 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
16d30 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
16d40 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
16d50 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
16d60 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
16d70 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
16d80 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
16d90 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
16da0 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
16db0 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
16dc0 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
16dd0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
16de0 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
16df0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
16e00 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
16e10 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
16e20 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
16e30 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
16e40 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
16e50 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
16e60 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
16e70 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
16e80 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
16e90 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
16ea0 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
16eb0 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
16ec0 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
16ed0 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
16ee0 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
16ef0 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
16f00 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
16f10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
16f20 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
16f30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
16f40 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
16f50 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
16f60 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
16f70 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
16f80 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
16f90 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
16fa0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
16fb0 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
16fc0 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
16fd0 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
16fe0 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
16ff0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
17000 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
17010 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
17020 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
17030 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
17040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
17050 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
17060 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
17070 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
17080 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
17090 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
170a0 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
170b0 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
170c0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
170d0 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
170e0 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
170f0 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
17100 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
17110 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
17120 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
17130 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
17140 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
17150 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
17160 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
17170 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
17180 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
17190 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
171a0 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
171b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
171c0 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
171d0 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
171e0 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
171f0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a   column */../*.*
17200 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * Combinations o
17210 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50  f two or more EP
17220 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  _* flags.*/.#def
17230 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
17240 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
17250 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f  Subquery) /* Pro
17260 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74  pagate these bit
17270 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a  s up tree */../*
17280 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
17290 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
172a0 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
172b0 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
172c0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
172d0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
172e0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
172f0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
17300 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
17310 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
17320 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
17330 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
17340 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
17350 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
17360 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
17370 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
17380 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
17390 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
173a0 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
173b0 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
173c0 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
173d0 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
173e0 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
173f0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
17400 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
17410 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
17420 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
17430 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
17440 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
17450 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
17460 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
17470 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
17480 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
17490 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
174a0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
174b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
174c0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
174d0 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
174e0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
174f0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
17500 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
17510 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
17520 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
17530 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
17540 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
17550 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
17560 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
17570 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
17580 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
17590 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
175a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
175b0 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
175c0 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
175d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
175e0 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
175f0 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
17600 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
17610 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
17620 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
17630 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
17640 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
17650 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
17660 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
17670 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
17680 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
17690 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
176a0 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
176b0 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
176c0 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
176d0 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
176e0 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
176f0 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
17700 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
17710 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
17720 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
17730 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
17740 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
17750 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
17760 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
17770 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
17780 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
17790 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
177a0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
177b0 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
177c0 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
177d0 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
177e0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
177f0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
17800 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
17810 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
17820 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
17830 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
17840 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
17850 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
17860 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
17870 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
17880 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
17890 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
178a0 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
178b0 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
178c0 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
178d0 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
178e0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
178f0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
17900 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
17910 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
17920 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
17930 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
17940 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
17950 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
17960 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
17970 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
17980 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
17990 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
179a0 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
179b0 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
179c0 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
179d0 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
179e0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
179f0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
17a00 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
17a10 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
17a20 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
17a30 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
17a40 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
17a50 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
17a60 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
17a70 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
17a80 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
17a90 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
17aa0 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
17ab0 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
17ac0 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
17ad0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17ae0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
17af0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
17b00 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
17b10 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
17b20 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
17b30 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
17b40 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
17b50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
17b60 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
17b70 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
17b80 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
17b90 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
17ba0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
17bb0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
17bc0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
17bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
17be0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
17bf0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
17c00 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
17c10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
17c20 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
17c30 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
17c40 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
17c50 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
17c60 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
17c70 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
17c80 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
17c90 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
17ca0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
17cb0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
17cc0 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
17cd0 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
17ce0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
17cf0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
17d00 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
17d10 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
17d20 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
17d30 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
17d40 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
17d50 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
17d60 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
17d70 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
17d80 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
17d90 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
17da0 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
17db0 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
17dc0 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
17dd0 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
17de0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17df0 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
17e00 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
17e10 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a  /.    } u;.  } *
17e20 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
17e30 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
17e40 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
17e50 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
17e60 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
17e70 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17e80 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17e90 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
17ea0 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
17eb0 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
17ec0 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
17ed0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
17ee0 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
17ef0 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
17f00 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
17f10 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
17f20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17f30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
17f40 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
17f50 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
17f60 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
17f70 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
17f80 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
17f90 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
17fa0 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
17fb0 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
17fc0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
17fd0 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
17fe0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17ff0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
18000 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
18010 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
18020 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
18030 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
18040 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
18050 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
18060 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
18070 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
18080 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
18090 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
180a0 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
180b0 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
180c0 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
180d0 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
180e0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
180f0 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
18100 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
18110 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
18120 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
18130 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
18140 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
18150 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
18160 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
18170 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
18180 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
18190 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
181a0 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
181b0 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
181c0 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
181d0 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
181e0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
181f0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
18200 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
18210 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
18220 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18230 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
18240 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
18250 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
18260 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
18270 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
18280 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
18290 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
182a0 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
182b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
182c0 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
182d0 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
182e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
182f0 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
18300 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
18310 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
18320 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
18330 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
18340 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
18350 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
18360 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
18370 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
18380 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
18390 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
183a0 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
183b0 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
183c0 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
183d0 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
183e0 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
183f0 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
18400 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
18410 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
18420 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
18430 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
18440 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
18450 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
18460 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
18470 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
18480 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
18490 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
184a0 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
184b0 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
184c0 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
184d0 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
184e0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
184f0 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
18500 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
18510 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
18520 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
18530 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c  <(n)).#define AL
18540 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74  LBITS      ((Bit
18550 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  mask)-1)../*.** 
18560 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
18570 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
18580 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
18590 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
185a0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
185b0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
185c0 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
185d0 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
185e0 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
185f0 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
18600 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
18610 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
18620 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
18630 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
18640 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
18650 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
18660 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
18670 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
18680 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
18690 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
186a0 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
186b0 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
186c0 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
186d0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
186e0 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
186f0 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
18700 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
18710 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
18720 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
18730 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
18740 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
18750 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
18760 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
18770 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
18780 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
18790 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
187a0 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
187b0 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
187c0 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
187d0 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
187e0 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
187f0 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
18800 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
18810 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
18820 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
18830 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
18840 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
18850 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
18860 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
18870 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
18880 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
18890 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
188a0 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
188b0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
188c0 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
188d0 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
188e0 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
188f0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
18900 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
18910 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
18920 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
18930 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
18940 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
18950 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
18960 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
18970 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
18980 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
18990 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
189a0 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
189b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
189c0 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
189d0 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
189e0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
189f0 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
18a00 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
18a10 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
18a20 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
18a30 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
18a40 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
18a50 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
18a60 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
18a70 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
18a80 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
18a90 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
18aa0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
18ab0 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
18ac0 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
18ad0 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
18ae0 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
18af0 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
18b00 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
18b10 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
18b20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
18b30 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
18b40 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
18b50 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
18b60 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
18b70 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
18b80 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
18b90 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
18ba0 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
18bb0 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
18bc0 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
18bd0 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
18be0 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
18bf0 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
18c00 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
18c10 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
18c20 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
18c30 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
18c40 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
18c50 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
18c60 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
18c70 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
18c80 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
18c90 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
18ca0 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20  is able and the 
18cb0 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
18cc0 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
18cd0 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
18ce0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
18cf0 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
18d00 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
18d10 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65  nsigned isIndexe
18d20 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  dBy :1;   /* Tru
18d30 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
18d40 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
18d50 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
18d60 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a  gned isTabFunc :
18d70 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  1;     /* True i
18d80 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  f table-valued-f
18d90 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a  unction syntax *
18da0 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
18db0 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
18dc0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
18dd0 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
18de0 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75  lated */.      u
18df0 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
18e00 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
18e10 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
18e20 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
18e30 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
18e40 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
18e50 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
18e60 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
18e70 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67  WITH */.    } fg
18e80 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
18e90 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
18ea0 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
18eb0 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
18ec0 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
18ed0 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
18ee0 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
18ef0 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
18f00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
18f10 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
18f20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
18f30 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
18f40 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
18f50 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
18f60 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
18f70 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
18f80 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
18f90 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
18fa0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
18fb0 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
18fc0 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
18fd0 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
18fe0 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
18ff0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
19000 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
19010 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74  dBy;    /* Ident
19020 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
19030 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
19040 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
19050 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63   ExprList *pFunc
19060 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e  Arg;  /* Argumen
19070 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75  ts to table-valu
19080 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ed-function */. 
19090 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64     } u1;.    Ind
190a0 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f  ex *pIBIndex;  /
190b0 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
190c0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
190d0 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79  to u1.zIndexedBy
190e0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
190f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
19100 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
19110 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
19120 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
19130 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
19140 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
19150 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
19160 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
19170 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
19180 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
19190 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
191a0 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
191b0 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
191c0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
191d0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
191e0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
191f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
19200 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
19210 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
19220 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
19230 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
19240 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
19250 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
19260 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
19270 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
19280 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
19290 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
192a0 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
192b0 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
192c0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
192d0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
192e0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
192f0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
19300 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
19310 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
19320 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
19330 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
19340 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
19350 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
19360 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
19370 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
19380 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
19390 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
193a0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
193b0 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
193c0 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
193d0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
193e0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
193f0 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
19400 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
19410 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
19420 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19430 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
19440 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
19450 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
19460 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
19470 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
19480 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
19490 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
194a0 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
194b0 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
194c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
194d0 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
194e0 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
194f0 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
19500 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
19510 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
19520 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30  OPEN_CLOSE  0x00
19530 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
19540 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
19550 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
19560 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
19570 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  E      0x0020 /*
19580 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
19590 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
195a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
195b0 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
195c0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c     0x0040 /* Onl
195d0 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
195e0 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
195f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19600 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20  E_NO_AUTOINDEX  
19610 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73     0x0080 /* Dis
19620 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20  allow automatic 
19630 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
19640 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
19650 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
19660 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
19670 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
19680 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
19690 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
196a0 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f      0x0200 /* pO
196b0 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
196c0 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
196d0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
196e0 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
196f0 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41  T    0x0400 /* A
19700 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
19710 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
19720 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19730 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
19740 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f   0x0800 /* Suppo
19750 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
19760 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
19770 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45  fine WHERE_REOPE
19780 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31 30  N_IDX       0x10
19790 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65  00 /* Try to use
197a0 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f   OP_ReopenIdx */
197b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
197c0 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
197d0 30 78 32 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53  0x2000 /* ONEPAS
197e0 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
197f0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
19800 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f  efine WHERE_USE_
19810 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34  LIMIT        0x4
19820 30 30 30 20 2f 2a 20 54 68 65 72 65 20 69 73 20  000 /* There is 
19830 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54  a constant LIMIT
19840 20 63 6c 61 75 73 65 20 2a 2f 0a 0a 2f 2a 20 41   clause */../* A
19850 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
19860 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
19870 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
19880 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
19890 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
198a0 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
198b0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
198c0 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
198d0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
198e0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
198f0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
19900 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19910 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
19920 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
19930 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
19940 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
19950 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
19960 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
19970 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
19980 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
19990 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
199a0 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
199b0 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
199c0 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
199d0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
199e0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
199f0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
19a00 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
19a10 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
19a20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
19a30 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
19a40 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
19a50 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
19a60 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
19a70 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
19a80 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
19a90 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
19aa0 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
19ab0 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
19ac0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
19ad0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
19ae0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
19af0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
19b00 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
19b10 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
19b20 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
19b30 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
19b40 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
19b50 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
19b60 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
19b70 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
19b80 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
19b90 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
19ba0 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
19bb0 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
19bc0 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
19bd0 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
19be0 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
19bf0 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
19c00 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
19c10 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
19c20 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
19c30 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
19c40 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
19c50 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
19c60 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
19c70 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
19c80 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
19c90 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
19ca0 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
19cb0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
19cc0 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
19cd0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
19ce0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
19cf0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
19d00 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
19d10 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
19d20 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
19d30 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
19d40 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
19d50 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
19d60 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
19d70 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
19d80 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
19d90 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
19da0 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
19db0 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
19dc0 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
19dd0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
19de0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
19df0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
19e00 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
19e10 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
19e20 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
19e30 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
19e40 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
19e50 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
19e60 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
19e70 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
19e80 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
19e90 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
19ea0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
19eb0 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
19ec0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
19ed0 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
19ee0 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
19ef0 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
19f00 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
19f10 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
19f20 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
19f30 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
19f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19f50 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
19f60 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
19f70 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
19f80 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
19f90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
19fa0 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
19fb0 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
19fc0 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
19fd0 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
19fe0 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
19ff0 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
1a000 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
1a010 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1a020 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1a030 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1a040 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1a050 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61   Note:  NC_MinMa
1a060 78 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74  xAgg must have t
1a070 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
1a080 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e   SF_MinMaxAgg an
1a090 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
1a0a0 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 0a 2a 2f 0a 23  _MINMAX..**.*/.#
1a0b0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1a0c0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1a0d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1a0e0 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1a0f0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1a100 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30  C_HasAgg    0x00
1a110 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  02  /* One or mo
1a120 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
1a130 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
1a140 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
1a150 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54  k   0x0004  /* T
1a160 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1a170 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
1a180 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
1a190 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
1a1a0 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20  Func 0x0008  /* 
1a1b0 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
1a1c0 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
1a1d0 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
1a1e0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1a1f0 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72     0x0010  /* Tr
1a200 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1a210 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1a220 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1a230 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1a240 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1a250 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1a260 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1a270 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1a280 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1a290 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1a2a0 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1a2b0 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1a2c0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1a2d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1a2e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1a2f0 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
1a300 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
1a310 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
1a320 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
1a330 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a340 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
1a350 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
1a360 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
1a370 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
1a380 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
1a390 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
1a3a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
1a3b0 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
1a3c0 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
1a3d0 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
1a3e0 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
1a3f0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1a400 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
1a410 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
1a420 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
1a430 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
1a440 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
1a450 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
1a460 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
1a470 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
1a480 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
1a490 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
1a4a0 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
1a4b0 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
1a4c0 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
1a4d0 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
1a4e0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
1a4f0 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
1a500 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
1a510 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
1a520 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
1a530 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
1a540 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
1a550 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
1a560 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
1a570 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
1a580 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1a590 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
1a5a0 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
1a5b0 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
1a5c0 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
1a5d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1a5e0 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
1a5f0 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
1a600 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
1a610 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
1a620 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
1a630 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
1a640 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1a650 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
1a660 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
1a670 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1a680 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
1a690 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
1a6a0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1a6b0 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
1a6c0 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
1a6d0 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
1a6e0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1a6f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1a700 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
1a710 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
1a720 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
1a730 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
1a740 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1a750 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
1a760 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
1a770 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
1a780 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67  _EXCEPT */.  Log
1a790 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  Est nSelectRow; 
1a7a0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1a7b0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1a7c0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20  t rows */.  u32 
1a7d0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
1a7e0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
1a7f0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
1a800 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
1a810 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
1a820 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
1a830 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
1a840 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
1a850 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1a860 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
1a870 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
1a880 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
1a890 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
1a8a0 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
1a8b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1a8c0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1a8d0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1a8e0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1a8f0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1a900 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1a910 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1a920 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1a930 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1a940 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1a950 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1a960 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1a970 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1a980 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1a990 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1a9a0 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1a9b0 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1a9c0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1a9d0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1a9e0 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1a9f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1aa00 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1aa10 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1aa20 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1aa30 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1aa40 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1aa50 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1aa60 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1aa70 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1aa80 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1aa90 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1aaa0 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1aab0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1aac0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1aad0 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
1aae0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
1aaf0 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
1ab00 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1ab10 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1ab20 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1ab30 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1ab40 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1ab50 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1ab60 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
1ab70 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1ab80 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
1ab90 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
1aba0 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
1abb0 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
1abc0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
1abd0 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 30 78  istinct       0x
1abe0 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  00001  /* Output
1abf0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
1ac00 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
1ac10 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20  F_All           
1ac20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63   0x00002  /* Inc
1ac30 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65  ludes the ALL ke
1ac40 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1ac50 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
1ac60 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49     0x00004  /* I
1ac70 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
1ac80 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
1ac90 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
1aca0 65 67 61 74 65 20 20 20 20 20 20 30 78 30 30 30  egate      0x000
1acb0 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  08  /* Contains 
1acc0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1acd0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1ace0 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1acf0 20 30 78 30 30 30 31 30 20 20 2f 2a 20 55 73 65   0x00010  /* Use
1ad00 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1ad10 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1ad20 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1ad30 64 20 20 20 20 20 20 20 30 78 30 30 30 32 30 20  d       0x00020 
1ad40 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1ad50 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1ad60 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1ad70 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1ad80 66 6f 20 20 20 20 30 78 30 30 30 34 30 20 20 2f  fo    0x00040  /
1ad90 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1ada0 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1adb0 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1adc0 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1add0 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20 50     0x00080  /* P
1ade0 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1adf0 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1ae00 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1ae10 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1ae20 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1ae30 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1ae40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1ae50 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1ae60 30 32 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0200  /* Single 
1ae70 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1ae80 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1ae90 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1aea0 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1aeb0 34 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  400  /* Part of 
1aec0 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1aed0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1aee0 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
1aef0 6f 6e 76 65 72 74 20 20 20 30 78 30 30 38 30 30  onvert   0x00800
1af00 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
1af10 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1af20 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1af30 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1af40 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1af50 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1af60 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1af70 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1af80 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1af90 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1afa0 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1afb0 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1afc0 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1afd0 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1afe0 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1aff0 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1b000 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1b010 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1b020 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1b030 20 30 78 30 38 30 30 30 20 20 2f 2a 20 42 79 20   0x08000  /* By 
1b040 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1b050 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1b060 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1b070 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1b080 78 31 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x10000  /* Inclu
1b090 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1b0a0 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a  s in output */..
1b0b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1b0c0 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1b0d0 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1b0e0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1b0f0 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1b100 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1b110 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1b120 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1b130 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1b140 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1b150 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1b160 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1b170 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1b180 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1b190 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b1b0 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1b1c0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1b1d0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1b1e0 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1b1f0 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1b200 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1b210 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1b220 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1b230 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1b240 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1b250 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1b260 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1b270 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b280 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1b290 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1b2a0 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1b2b0 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1b2c0 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1b2d0 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1b2e0 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1b2f0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1b300 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1b310 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1b320 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1b350 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1b360 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1b370 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1b380 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1b390 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1b3a0 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1b3b0 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1b3c0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1b3d0 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1b3e0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1b3f0 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1b400 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1b410 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1b420 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b430 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1b440 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1b450 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1b460 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1b470 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1b480 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1b490 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1b4a0 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1b4c0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1b4d0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1b4e0 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1b510 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1b520 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1b530 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1b540 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1b550 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1b560 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1b570 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1b580 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1b590 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1b5a0 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1b5b0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1b5c0 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1b5f0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1b600 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1b610 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1b620 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1b630 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1b640 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1b650 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1b680 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1b690 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1b6a0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1b6b0 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1b6c0 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1b6d0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1b6e0 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1b710 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1b720 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1b730 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1b740 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b750 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1b760 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1b770 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1b7a0 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1b7b0 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1b7c0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1b7d0 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1b7e0 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1b7f0 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1b800 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1b810 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1b820 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1b830 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1b840 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1b850 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1b860 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1b870 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1b8a0 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1b8b0 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1b8c0 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1b8f0 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1b900 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1b910 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1b940 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1b950 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1b960 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1b970 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1b980 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1b990 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1b9a0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1b9b0 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1b9c0 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1b9d0 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1ba00 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1ba10 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1ba20 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1ba30 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1ba40 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1ba50 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1ba60 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1ba90 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1baa0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1bab0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1bac0 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1bad0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1bae0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1baf0 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1bb00 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1bb10 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1bb20 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1bb50 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1bb60 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1bb70 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1bb90 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1bba0 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1bbb0 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1bbc0 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1bbd0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1bbe0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1bbf0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1bc00 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1bc20 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1bc30 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1bc40 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1bc50 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1bc70 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1bc80 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1bc90 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1bca0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1bcb0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1bcc0 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1bcf0 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1bd00 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1bd10 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1bd30 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1bd40 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1bd50 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1bd60 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1bd70 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1bd80 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1bd90 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1bda0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1bdb0 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1bdc0 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1bdd0 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1bde0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1bdf0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1be00 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1be10 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1be20 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1be30 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1be40 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1be50 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1be60 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1be70 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1be80 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1be90 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1bea0 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1beb0 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1bec0 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1bed0 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1bee0 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1bef0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1bf00 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1bf10 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1bf20 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1bf30 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1bf40 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1bf50 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1bf60 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1bf70 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1bf80 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1bf90 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1bfa0 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1bfb0 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1bfc0 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1bfd0 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1bfe0 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1bff0 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1c000 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1c010 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1c020 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1c030 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1c040 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1c050 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1c060 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1c070 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1c080 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1c090 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1c0a0 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1c0b0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1c0c0 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1c0d0 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1c0e0 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1c0f0 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1c100 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1c110 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1c120 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1c130 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1c140 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1c150 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1c160 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1c170 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1c180 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1c190 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1c1a0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1c1b0 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1c1c0 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1c1d0 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1c1e0 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1c1f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1c200 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1c210 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1c220 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1c230 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1c240 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1c250 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1c260 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
1c270 61 66 66 53 64 73 74 3b 20 20 20 20 20 20 20 20  affSdst;        
1c280 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
1c290 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
1c2a0 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
1c2b0 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1c2c0 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1c2d0 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1c2e0 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1c2f0 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1c300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1c310 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1c320 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1c330 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1c340 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1c350 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1c360 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1c370 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c380 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1c390 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1c3a0 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1c3b0 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1c3c0 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1c3d0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1c3e0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1c3f0 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1c400 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1c410 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1c420 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1c430 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1c440 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1c450 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1c460 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1c470 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1c480 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1c490 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1c4a0 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1c4b0 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1c4c0 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1c4d0 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1c4e0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1c4f0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1c500 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1c510 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1c520 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1c530 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1c540 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1c550 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1c560 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1c570 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1c580 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1c590 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1c5a0 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1c5b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1c5c0 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1c5d0 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1c5e0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1c5f0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1c600 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1c610 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1c620 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1c630 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1c640 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1c650 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1c660 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1c670 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1c680 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1c690 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1c6a0 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1c6b0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1c6c0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1c6d0 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1c6e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
1c6f0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
1c700 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
1c710 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1c720 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1c730 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
1c740 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
1c750 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1c760 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1c770 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1c780 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1c790 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1c7a0 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1c7b0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1c7c0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1c7d0 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1c7e0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1c7f0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1c800 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1c810 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1c820 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1c830 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1c840 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1c850 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1c860 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1c870 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1c880 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1c890 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1c8a0 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1c8b0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1c8c0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1c8d0 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1c8e0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1c8f0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1c900 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1c910 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1c920 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1c930 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1c940 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1c950 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1c960 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1c970 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1c980 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1c990 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1c9a0 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1c9b0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1c9c0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1c9d0 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1c9e0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1c9f0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1ca00 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1ca10 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1ca20 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1ca30 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1ca40 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
1ca50 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1ca60 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1ca70 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1ca80 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1ca90 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1caa0 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1cab0 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1cac0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1cad0 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1cae0 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1caf0 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1cb00 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1cb10 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1cb20 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1cb30 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1cb40 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1cb50 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1cb60 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1cb70 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1cb80 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1cb90 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1cba0 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1cbc0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1cbd0 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1cbe0 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1cbf0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1cc00 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1cc10 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1cc20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1cc30 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1cc40 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1cc50 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1cc60 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1cc70 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1cc80 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1cc90 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1cca0 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1ccb0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1ccc0 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1ccd0 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1cce0 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1ccf0 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1cd00 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1cd10 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1cd20 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1cd30 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1cd40 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1cd50 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1cd60 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1cd70 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1cd80 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1cd90 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1cda0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1cdb0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1cdc0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1cdd0 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1cde0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1cdf0 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1ce00 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1ce10 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1ce20 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1ce30 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1ce40 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1ce50 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1ce60 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1ce70 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1ce80 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1ce90 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1cea0 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1ceb0 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1cec0 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1ced0 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1cee0 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1cef0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1cf00 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1cf10 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1cf20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1cf30 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1cf40 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1cf50 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1cf60 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1cf70 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1cf80 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1cf90 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1cfa0 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1cfb0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1cfc0 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1cfd0 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1cfe0 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1cff0 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1d000 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1d010 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1d020 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1d030 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1d040 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1d050 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1d060 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1d070 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1d080 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1d090 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1d0a0 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1d0b0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1d0c0 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1d0d0 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1d0e0 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
1d0f0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1d100 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1d110 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1d120 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1d130 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1d140 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1d150 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1d160 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1d170 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1d180 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1d190 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1d1a0 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1d1b0 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1d1c0 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1d1d0 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1d1e0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1d1f0 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1d200 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1d210 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1d220 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1d230 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1d240 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1d250 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1d260 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1d270 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1d280 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1d290 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1d2a0 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1d2b0 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1d2c0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1d2d0 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1d2e0 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1d2f0 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1d300 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1d310 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1d320 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1d330 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1d340 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1d350 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1d360 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1d370 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1d380 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1d390 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1d3a0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1d3b0 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1d3c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1d3d0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1d3e0 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1d3f0 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1d400 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1d410 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1d420 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1d430 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1d440 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1d450 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1d460 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1d470 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1d480 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1d490 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1d4a0 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1d4b0 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1d4c0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1d4d0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1d4e0 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1d4f0 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1d500 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1d510 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1d520 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
1d530 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
1d540 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
1d550 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
1d560 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
1d570 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
1d580 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
1d590 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
1d5a0 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
1d5b0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1d5c0 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
1d5d0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1d5e0 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
1d5f0 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
1d600 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
1d610 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1d620 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1d630 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
1d640 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
1d650 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
1d660 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
1d670 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d680 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
1d690 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
1d6a0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
1d6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d6c0 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
1d6d0 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
1d6e0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74  ar */.  int nSet
1d6f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d700 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75  Number of sets u
1d710 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1d720 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20  int nOnce;      
1d730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d740 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75  f OP_Once instru
1d750 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f  ctions so far */
1d760 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b  .  int nOpAlloc;
1d770 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d780 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63  r of slots alloc
1d790 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1d7a0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f  p[] */.  int szO
1d7b0 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a  pAlloc;       /*
1d7c0 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79   Bytes of memory
1d7d0 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1d7e0 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1d7f0 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f  */.  int iFixedO
1d800 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76  p;        /* Nev
1d810 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f  er back out opco
1d820 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f  des iFixedOp-1 o
1d830 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69  r earlier */.  i
1d840 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
1d850 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1d860 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
1d870 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
1d880 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
1d890 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
1d8a0 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69  /* Table of an i
1d8b0 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73  ndex whose exprs
1d8c0 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1d8d0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1d8e0 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1d8f0 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1d900 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1d910 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1d920 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1d930 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1d940 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1d950 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1d960 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1d970 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1d980 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d990 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1d9a0 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1d9b0 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1d9c0 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1d9d0 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1d9e0 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1d9f0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1da00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1da10 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1da20 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1da30 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1da40 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1da50 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1da60 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1da70 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1da80 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1da90 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1daa0 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1dab0 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1dac0 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1dad0 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1dae0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1daf0 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1db00 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1db10 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1db20 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1db30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1db40 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1db50 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1db60 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1db70 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1db80 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1db90 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1dba0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1dbb0 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1dbc0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1dbd0 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1dbe0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1dbf0 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1dc00 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1dc10 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1dc20 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1dc30 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1dc40 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1dc50 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1dc60 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1dc70 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1dc80 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1dc90 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1dca0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1dcb0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1dcc0 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1dcd0 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1dce0 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1dcf0 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1dd00 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1dd10 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1dd20 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1dd30 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1dd40 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1dd50 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1dd60 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1dd70 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1dd80 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1dd90 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1dda0 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1ddb0 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1ddc0 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1ddd0 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1dde0 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1ddf0 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1de00 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1de10 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1de20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1de30 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1de40 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1de50 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1de60 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1de70 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1de80 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1de90 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1dea0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1deb0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1dec0 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1ded0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dee0 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1def0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1df00 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1df10 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1df20 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1df30 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1df40 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1df50 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1df60 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1df70 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1df80 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1df90 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1dfa0 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1dfb0 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1dfc0 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1dfd0 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1dfe0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1dff0 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1e000 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1e010 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1e020 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1e030 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1e040 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1e050 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1e060 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1e070 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1e080 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1e090 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1e0a0 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1e0b0 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1e0c0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1e0d0 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1e0e0 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1e0f0 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1e100 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1e110 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1e120 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1e130 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1e140 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1e150 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1e160 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1e170 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1e180 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1e190 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1e1a0 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1e1b0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1e1c0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1e1d0 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1e1e0 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1e1f0 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1e200 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1e210 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1e220 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1e230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e270 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
1e280 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
1e290 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
1e2a0 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
1e2b0 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
1e2c0 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
1e2d0 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
1e2e0 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
1e2f0 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
1e300 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
1e310 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
1e320 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65  rse,nVar) so the
1e330 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74   nVar field must
1e340 20 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69   be the first fi
1e350 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20  eld.  ** in the 
1e360 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
1e370 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1e380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e3a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e3b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1e3c0 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20   ynVar nVar;    
1e3d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e3e0 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1e3f0 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1e400 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1e410 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20    int nzVar;    
1e420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1e430 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62  umber of availab
1e440 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61  le slots in azVa
1e450 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53  r[] */.  u8 iPkS
1e460 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
1e470 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53     /* ASC or DES
1e480 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  C for INTEGER PR
1e490 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75  IMARY KEY */.  u
1e4a0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1e4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e4c0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1e4d0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1e4e0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1e4f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e500 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1e510 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1e520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e530 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1e540 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1e550 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1e560 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1e570 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e580 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1e590 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1e5a0 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e5c0 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1e5d0 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1e5e0 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1e5f0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1e600 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1e610 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1e620 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1e630 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1e640 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1e650 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1e660 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1e670 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1e680 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1e690 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1e6a0 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1e6b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1e6c0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1e6d0 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1e6e0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1e6f0 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1e700 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e710 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1e720 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1e730 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1e740 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1e750 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1e760 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1e770 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1e780 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1e790 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1e7a0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1e7b0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1e7c0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1e7d0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1e7e0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1e7f0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1e800 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1e810 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1e820 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1e830 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1e840 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1e850 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1e860 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1e870 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1e880 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1e890 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1e8a0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1e8b0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1e8c0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1e8d0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1e8e0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1e8f0 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1e900 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1e910 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1e920 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1e930 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1e940 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1e950 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1e960 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1e970 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1e980 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1e990 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1e9a0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1e9b0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1e9c0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1e9d0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1e9e0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1e9f0 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1ea00 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1ea10 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1ea20 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1ea30 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1ea40 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1ea50 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1ea60 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1ea70 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1ea80 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1eaa0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1eab0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
1eac0 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72   With *pWithToFr
1ead0 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72  ee;        /* Fr
1eae0 65 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a  ee this WITH obj
1eaf0 65 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ect at the end o
1eb00 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d  f the parse */.}
1eb10 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1eb20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1eb30 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1eb40 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1eb50 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1eb60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1eb70 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1eb80 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1eb90 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1eba0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1ebb0 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1ebc0 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1ebd0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1ebe0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1ebf0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1ec00 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1ec10 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1ec20 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1ec30 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1ec40 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1ec50 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1ec60 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1ec70 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1ec80 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1ec90 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1eca0 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1ecb0 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1ecc0 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1ecd0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ecf0 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1ed00 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1ed10 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1ed20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1ed30 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1ed40 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1ed50 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1ed60 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49   0x01    /* OP_I
1ed70 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70  nsert: Set to up
1ed80 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
1ed90 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f           /* Also
1edc0 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74   used in P2 (not
1edd0 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74   P5) of OP_Delet
1ede0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
1edf0 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20  LAG_EPHEM       
1ee00 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1ee10 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61  Column: Ephemera
1ee20 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a  l output is ok *
1ee30 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1ee40 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
1ee50 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
1ee60 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
1ee70 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
1ee80 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1ee90 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
1eea0 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
1eeb0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
1eec0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1eed0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
1eee0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
1eef0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
1ef00 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
1ef10 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
1ef20 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
1ef30 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
1ef40 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
1ef50 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
1ef60 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
1ef70 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
1ef80 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1ef90 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
1efa0 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
1efb0 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
1efc0 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
1efd0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
1efe0 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
1eff0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1f000 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
1f010 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1f020 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
1f030 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
1f040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1f050 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
1f060 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
1f070 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
1f080 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
1f090 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1f0a0 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
1f0b0 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
1f0c0 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52  n should use BTR
1f0d0 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a  EE_FORDELETE */.
1f0e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1f0f0 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
1f100 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
1f110 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
1f120 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
1f130 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1f140 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
1f150 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
1f160 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
1f170 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  utation */.#defi
1f180 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ne OPFLAG_SAVEPO
1f190 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20  SITION  0x02    
1f1a0 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65  /* OP_Delete: ke
1f1b0 65 70 20 63 75 72 73 6f 72 20 70 6f 73 69 74 69  ep cursor positi
1f1c0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
1f1d0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
1f1e0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
1f1f0 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
1f200 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
1f210 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1f220 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1f230 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1f240 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1f250 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1f260 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1f270 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  r.. *. * Pointer
1f280 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1f290 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1f2a0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1f2b0 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1f2c0 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1f2d0 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1f2e0 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1f2f0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1f300 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61  s the. *    data
1f310 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
1f320 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
1f330 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
1f340 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
1f350 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
1f360 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
1f370 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
1f380 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
1f390 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
1f3a0 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
1f3b0 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
1f3c0 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
1f3d0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1f3e0 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
1f3f0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
1f400 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
1f410 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
1f420 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
1f430 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
1f440 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
1f450 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1f460 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
1f470 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1f480 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
1f490 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
1f4a0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
1f4b0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1f4c0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
1f4d0 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
1f4e0 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
1f4f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1f500 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
1f510 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f530 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
1f540 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1f550 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
1f560 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
1f570 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
1f580 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5a0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1f5b0 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1f5c0 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
1f5d0 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f5f0 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
1f600 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
1f610 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
1f620 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
1f630 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
1f640 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
1f650 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
1f660 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
1f670 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
1f680 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
1f690 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
1f6a0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
1f6b0 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
1f6e0 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
1f6f0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1f700 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
1f710 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1f720 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
1f730 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
1f740 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
1f750 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1f760 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
1f770 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f780 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
1f790 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
1f7a0 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1f7c0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
1f7d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1f7e0 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
1f7f0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
1f800 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
1f810 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
1f820 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
1f830 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
1f840 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
1f850 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
1f860 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a  etermine which..
1f870 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
1f880 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
1f890 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
1f8a0 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
1f8b0 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
1f8c0 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
1f8d0 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
1f8e0 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
1f8f0 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
1f900 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
1f910 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
1f920 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
1f930 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
1f940 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
1f950 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
1f960 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
1f970 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
1f980 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
1f990 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
1f9a0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
1f9b0 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
1f9c0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1f9d0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
1f9e0 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
1f9f0 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
1fa00 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
1fa10 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
1fa20 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
1fa30 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
1fa40 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74   the. * associat
1fa50 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1fa60 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1fa70 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1fa80 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1fa90 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1faa0 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1fab0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1fac0 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
1fad0 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
1fae0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
1faf0 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
1fb00 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
1fb10 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
1fb20 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
1fb30 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
1fb40 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
1fb50 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a  rmined by the. *
1fb60 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
1fb70 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
1fb80 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
1fb90 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
1fba0 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
1fbb0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
1fbc0 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
1fbd0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1fbe0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1fbf0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
1fc00 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1fc20 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
1fc30 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
1fc40 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
1fc50 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a  rwise NULL.. * z
1fc60 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
1fc70 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1fc80 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
1fc90 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
1fca0 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
1fcb0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1fcc0 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
1fcd0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1fce0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1fcf0 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
1fd00 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
1fd10 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
1fd20 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
1fd30 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1fd40 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1fd50 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
1fd60 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20  ) VALUES .... * 
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1fd80 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
1fd90 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
1fda0 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
1fdb0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1fdc0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
1fdd0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
1fde0 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  ELETE). * zTarge
1fdf0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
1fe00 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1fe10 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
1fe20 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1fe30 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1fe40 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
1fe50 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1fe60 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1fe70 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1fe80 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1fe90 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1fea0 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67  UPDATE). * zTarg
1feb0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
1fec0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1fed0 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a  le to update.. *
1fee0 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1fef0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1ff00 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1ff10 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1ff20 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1ff40 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1ff50 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
1ff60 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
1ff70 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
1ff80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
1ff90 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
1ffa0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
1ffb0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
1ffc0 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
1ffd0 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
1ffe0 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
1fff0 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a     argument.. *.
20000 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
20010 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
20020 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20030 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
20040 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
20050 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
20060 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
20070 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
20080 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
20090 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
200a0 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
200b0 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
200c0 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
200d0 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
200e0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
200f0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
20100 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  ement or RHS of 
20110 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45  INSERT INTO SELE
20120 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72  CT ... */.  char
20130 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20   *zTarget;      
20140 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
20150 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
20160 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
20170 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
20180 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
20190 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
201a0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
201b0 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
201c0 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
201d0 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
201e0 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64   UPDATE. */.  Id
201f0 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
20200 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
20210 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
20220 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
20230 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
20240 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
20250 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
20260 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
20270 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
20280 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
20290 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
202a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
202b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
202c0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
202d0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
202e0 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
202f0 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
20300 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
20310 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
20320 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
20330 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
20340 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  cit..*/.typedef 
20350 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
20360 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
20370 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
20380 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
20390 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
203a0 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
203b0 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
203c0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
203d0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
203e0 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
203f0 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
20400 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
20410 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
20420 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
20430 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
20440 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
20450 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
20460 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
20470 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
20480 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
20490 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
204a0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
204b0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
204c0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
204d0 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
204e0 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
204f0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
20500 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
20510 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
20520 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
20530 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
20540 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
20550 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
20560 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
20570 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
20580 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
20590 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
205a0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
205b0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
205c0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
205d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
205e0 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
205f0 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
20600 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
20610 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
20620 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
20630 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
20640 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
20650 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
20660 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
20670 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
20680 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
20690 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
206a0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
206b0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
206c0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
206d0 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
206e0 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
206f0 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
20700 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
20710 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
20720 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
20730 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
20740 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
20750 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
20760 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
20770 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
20780 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
20790 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
207a0 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
207b0 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
207c0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
207d0 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
207e0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
207f0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
20800 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
20810 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
20820 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
20830 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
20840 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
20850 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
20860 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
20870 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
20880 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
20890 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
208a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
208b0 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
208c0 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
208d0 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
208e0 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
208f0 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
20900 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
20910 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
20920 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
20930 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
20940 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
20950 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
20960 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
20970 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
20980 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
20990 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
209a0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
209b0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
209c0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
209d0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
209e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
209f0 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
20a00 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
20a10 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
20a20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
20a30 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
20a40 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
20a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
20a60 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
20a70 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
20a80 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
20a90 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
20aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
20ab0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
20ac0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
20ad0 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
20ae0 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
20af0 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
20b00 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
20b10 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
20b20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
20b30 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
20b40 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
20b50 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
20b60 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
20b70 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
20b80 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
20b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
20ba0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
20bb0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
20bc0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
20bf0 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
20c00 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
20c10 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
20c20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20c30 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
20c40 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
20c50 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20c70 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
20c80 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
20c90 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
20ca0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20cc0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
20cd0 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
20ce0 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
20cf0 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
20d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
20d10 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
20d20 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
20d30 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
20d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
20d50 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
20d60 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
20d70 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
20d80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20d90 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
20da0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
20db0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
20dc0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
20de0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
20df0 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
20e00 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
20e10 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
20e20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
20e30 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
20e40 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
20e50 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
20e60 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
20e70 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
20e80 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
20e90 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
20ea0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
20eb0 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
20ec0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
20ed0 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
20ee0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
20ef0 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
20f00 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
20f10 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
20f20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
20f30 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f50 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
20f60 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
20f70 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
20f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20f90 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
20fa0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
20fb0 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
20fc0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
20fd0 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
20fe0 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
20ff0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
21000 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
21010 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
21020 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
21030 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
21040 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
21050 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
21060 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
21070 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
21080 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
21090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
210a0 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
210b0 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
210e0 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
210f0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
21100 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
21110 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21120 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
21130 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
21140 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21160 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
21170 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
21180 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
21190 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
211a0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
211b0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
211c0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
211d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
211f0 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
21200 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
21210 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
21220 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
21230 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
21240 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
21250 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
21260 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
21270 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
21280 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
21290 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
212a0 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
212c0 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
212d0 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
212e0 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
212f0 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
21300 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
21310 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
21320 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
21330 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
21340 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
21350 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21370 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
21380 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
21390 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
213a0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213c0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
213d0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
213e0 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
213f0 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
21400 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21410 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
21420 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
21430 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
21440 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
21470 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
21480 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
21490 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
214a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
214b0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
214c0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
214d0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
214e0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
214f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21500 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
21510 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
21520 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
21530 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
21540 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
21550 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
21560 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
21570 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
21580 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
21590 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
215a0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
215b0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
215e0 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
215f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
21600 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
21610 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
21620 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
21630 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
21640 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
21650 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
21660 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
21670 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
21680 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
21690 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
216a0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
216b0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
216c0 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
216d0 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
216e0 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
216f0 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
21700 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
21710 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
21720 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c  (void*,int iSrcL
21730 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
21740 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
21750 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
21760 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21790 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
217a0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
217b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
217c0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69  BUILTIN_TEST.  i
217d0 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
217e0 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
217f0 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
21800 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
21810 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
21820 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
21830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
21840 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
21850 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
21860 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
21870 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
21880 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
21890 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
218a0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
218b0 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
218c0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
218d0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
218e0 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
218f0 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
21900 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
21910 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
21920 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
21930 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
21940 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
21950 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
21960 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
21970 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
21980 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
21990 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
219a0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
219b0 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
219c0 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
219d0 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
219e0 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
219f0 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
21a00 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
21a10 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
21a20 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
21a30 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
21a40 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
21a50 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
21a60 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
21a70 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
21a80 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
21a90 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
21aa0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
21ab0 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
21ac0 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
21ad0 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
21ae0 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
21af0 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
21b00 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
21b10 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
21b20 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
21b30 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b50 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
21b60 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
21b70 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
21b80 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
21b90 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
21ba0 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
21bb0 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
21bc0 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
21bd0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
21be0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
21bf0 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
21c00 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
21c10 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
21c20 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
21c30 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
21c40 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
21c50 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21c80 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
21c90 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
21cc0 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
21cd0 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
21ce0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d00 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
21d10 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
21d20 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
21d30 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
21d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d50 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
21d60 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b  xt */.    int n;
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d90 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
21da0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
21db0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dd0 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
21de0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
21df0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
21e20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
21e30 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
21e40 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
21e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
21e60 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
21e70 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73  erences */.    s
21e80 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a  truct CCurHint *
21e90 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20  pCCurHint;      
21ea0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
21eb0 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
21ec0 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
21ed0 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
21f00 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
21f10 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
21f20 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
21f30 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
21f40 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
21f50 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
21f60 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
21f70 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
21f80 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
21f90 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
21fa0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
21fb0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
21fc0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
21fd0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
21fe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
21ff0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
22000 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
22010 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
22020 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
22030 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  , Expr*);../*.**
22040 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
22050 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
22060 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
22070 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
22080 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
22090 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
220a0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
220b0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
220c0 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
220d0 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
220e0 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
220f0 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
22100 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
22110 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
22120 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
22130 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
22140 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
22150 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
22160 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
22170 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
22180 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
22190 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
221a0 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
221b0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
221c0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
221d0 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
221e0 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
221f0 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
22200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22210 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
22220 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
22230 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
22240 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
22250 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
22260 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
22270 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
22280 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222a0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
222b0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
222c0 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
222d0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
222f0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
22300 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
22310 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
22320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
22330 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
22340 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
22350 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
22360 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
22370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
22380 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
22390 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
223a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
223b0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
223c0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
223d0 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
223e0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
223f0 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
22400 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
22410 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
22420 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
22430 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
22440 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
22450 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
22460 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
22470 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
22480 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
22490 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
224a0 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
224b0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
224d0 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
224e0 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
224f0 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
22500 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
22510 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
22520 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
22530 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
22540 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
22550 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
22560 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
22570 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
22580 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
22590 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
225a0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
225b0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
225c0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
225d0 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
225e0 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
225f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
22600 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
22630 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
22660 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
22670 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
22680 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
22690 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
226d0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
226e0 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
226f0 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
22700 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
22710 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
22720 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
22730 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
22740 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
22750 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
22760 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
22770 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
22780 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
22790 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
227a0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
227b0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
227c0 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
227d0 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
227e0 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
227f0 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
22800 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
22810 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
22820 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
22830 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
22840 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
22850 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
22860 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
22870 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
22880 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
22890 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
228a0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
228b0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
228c0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
228d0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
228e0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
228f0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
22900 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
22910 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
22920 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
22930 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
22940 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
22950 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
22960 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64  mError(int);.# d
22970 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
22980 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e  EM_BKPT sqlite3N
22990 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
229a0 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
229b0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
229c0 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72  BKPT sqlite3Ioer
229d0 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  rnomemError(__LI
229e0 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  NE__).#else.# de
229f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
22a00 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f  M_BKPT SQLITE_NO
22a10 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
22a20 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
22a30 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52  BKPT SQLITE_IOER
22a40 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a  R_NOMEM.#endif..
22a50 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46  /*.** FTS3 and F
22a60 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65  TS4 both require
22a70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
22a80 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65  upport.*/.#if de
22a90 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22aa0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
22ab0 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
22ac0 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64  NABLE_FTS3.# und
22ad0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
22ae0 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS4.#endif../*
22af0 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
22b00 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
22b10 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
22b20 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
22b30 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
22b40 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
22b50 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
22b60 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
22b70 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
22b80 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
22b90 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
22ba0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
22bb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
22bc0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
22bd0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
22be0 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
22bf0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
22c00 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
22c10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
22c20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
22c30 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
22c40 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
22c50 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
22c60 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
22c70 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
22c80 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
22c90 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
22ca0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
22cb0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
22cc0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
22cd0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
22ce0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
22cf0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
22d00 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
22d10 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
22d20 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
22d30 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
22d40 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
22d50 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
22d60 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
22d70 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
22d80 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
22d90 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
22da0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
22db0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
22dc0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
22dd0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
22de0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
22df0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
22e00 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
22e10 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
22e20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
22e30 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
22e40 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
22e50 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
22e60 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
22e70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
22e80 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
22e90 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
22ea0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
22eb0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
22ec0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
22ed0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
22ee0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
22ef0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
22f00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
22f10 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
22f20 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
22f30 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
22f40 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
22f50 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
22f60 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
22f70 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
22f80 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
22f90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
22fa0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
22fb0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
22fc0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
22fd0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
22fe0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
22ff0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
23000 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
23010 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
23020 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
23030 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
23040 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
23050 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
23060 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
23070 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
23080 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
23090 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
230a0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
230b0 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
230c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
230d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
230e0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
230f0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
23100 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
23110 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
23120 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
23130 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
23140 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
23150 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
23160 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
23170 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
23180 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
23190 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
231a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
231b0 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
231c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
231d0 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
231e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
231f0 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66  Char(u8);.#endif
23200 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
23210 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
23220 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ypes.*/.int sqli
23230 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  te3StrICmp(const
23240 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
23250 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23260 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
23270 68 61 72 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  har*);.const cha
23280 72 20 2a 73 71 6c 69 74 65 33 53 74 72 4e 65 78  r *sqlite3StrNex
23290 74 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t(const char*);.
232a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
232b0 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
232c0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
232d0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
232e0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
232f0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
23300 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
23310 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
23320 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
23330 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
23340 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
23350 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
23360 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
23370 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
23380 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
23390 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
233a0 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
233b0 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
233c0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
233d0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
233e0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
233f0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
23400 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23410 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  r*, u64);.void *
23420 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
23430 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
23440 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
23450 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
23460 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
23470 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
23480 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
23490 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
234a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
234b0 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
234c0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
234d0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
234e0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
234f0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
23500 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
23510 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
23520 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
23530 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
23540 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
23550 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
23560 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
23570 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
23580 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
23590 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
235a0 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
235b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
235c0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69  BUILTIN_TEST.voi
235d0 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
235e0 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
235f0 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
23600 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64  (*)(void));.#end
23610 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  if.int sqlite3He
23620 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
23630 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
23640 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
23650 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
23660 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
23670 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
23680 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
23690 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
236a0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
236b0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
236c0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
236d0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
236e0 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
236f0 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
23700 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
23710 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
23720 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
23730 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
23740 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
23750 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
23760 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
23770 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
23780 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
23790 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
237a0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
237b0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
237c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
237d0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
237e0 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
237f0 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
23800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
23810 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c  ackFree(D,P).#el
23820 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
23830 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
23840 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
23850 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
23860 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23870 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
23880 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
23890 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
238a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
238b0 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
238c0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
238d0 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
238e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
238f0 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
23900 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
23910 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
23920 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
23930 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
23940 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
23950 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
23960 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
23970 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
23980 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
23990 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
239a0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
239b0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
239c0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
239d0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
239e0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
239f0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
23a00 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
23a10 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
23a20 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
23a30 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
23a40 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
23a50 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
23a60 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
23a70 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
23a80 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  id);.#endif.#if 
23a90 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23aa0 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21  MUTEX_OMIT) && !
23ab0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
23ac0 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69  UTEX_NOOP).  voi
23ad0 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  d sqlite3MemoryB
23ae0 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65  arrier(void);.#e
23af0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
23b00 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
23b10 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69  r().#endif..sqli
23b20 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
23b30 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
23b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23b50 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74  tatusUp(int, int
23b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23b70 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69  tatusDown(int, i
23b80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23b90 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72  3StatusHighwater
23ba0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20  (int, int);../* 
23bb0 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65  Access to mutexe
23bc0 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
23bd0 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71  3_status() */.sq
23be0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
23bf0 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78  ite3Pcache1Mutex
23c00 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f  (void);.sqlite3_
23c10 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61  mutex *sqlite3Ma
23c20 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b  llocMutex(void);
23c30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23c40 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
23c50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
23c60 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
23c70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23c80 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
23c90 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
23ca0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
23cb0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
23cc0 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
23cd0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
23ce0 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
23cf0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
23d00 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
23d10 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
23d20 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
23d30 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
23d40 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
23d50 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
23d60 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
23d70 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
23d80 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23da0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
23db0 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
23dc0 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
23dd0 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
23de0 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
23df0 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f  values */.};..vo
23e00 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
23e10 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
23e20 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
23e30 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  st);.void sqlite
23e40 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  3XPrintf(StrAccu
23e50 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
23e60 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
23e70 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
23e80 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23e90 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
23ea0 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
23eb0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
23ec0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
23ed0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
23ee0 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
23ef0 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
23f00 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
23f10 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
23f20 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
23f30 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
23f40 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
23f50 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
23f60 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
23f70 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
23f80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
23f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
23fa0 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
23fb0 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
23fc0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
23fd0 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
23fe0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
23ff0 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
24000 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
24010 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
24020 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
24030 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
24040 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
24050 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
24060 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
24070 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54  e3TreeViewWith(T
24080 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
24090 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  With*, u8);.#end
240a0 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
240b0 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
240c0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
240d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
240e0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
240f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
24100 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
24110 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
24120 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
24130 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
24140 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
24150 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
24160 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
24170 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
24180 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
24190 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
241a0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
241b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
241c0 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
241d0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
241e0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
241f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24200 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
24210 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
24220 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
24230 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
24240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
24250 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
24260 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
24270 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
24280 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
24290 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  se*);.Expr *sqli
242a0 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
242b0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
242c0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
242d0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
242e0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
242f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
24300 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
24310 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
24320 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
24330 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
24340 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
24350 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
24360 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
24370 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
24380 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
24390 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
243a0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
243b0 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
243c0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
243d0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
243e0 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
243f0 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
24400 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
24410 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
24420 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
24430 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
24440 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
24450 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
24460 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
24470 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
24480 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
24490 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
244a0 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
244b0 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
244c0 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
244d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
244e0 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
244f0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
24500 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
24510 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
24520 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
24530 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20  ExprList*);.u32 
24540 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46  sqlite3ExprListF
24550 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c  lags(const ExprL
24560 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
24570 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
24580 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
24590 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
245a0 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
245b0 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
245c0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
245d0 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
245e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
245f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24600 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
24610 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
24620 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
24630 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
24640 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
24650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
24660 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
24670 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
24680 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
24690 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
246a0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
246b0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
246c0 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
246d0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
246e0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
246f0 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
24700 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
24710 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65  Column**);.Table
24720 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
24730 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
24740 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
24750 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
24760 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
24770 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71   int);.Index *sq
24780 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
24790 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31  ndex(Table*);.i1
247a0 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f  6 sqlite3ColumnO
247b0 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69  fIndex(Index*, i
247c0 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
247d0 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
247e0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
247f0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
24800 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e  );.#if SQLITE_EN
24810 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
24820 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  MNS.  void sqlit
24830 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
24840 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65  esFromName(Table
24850 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c  *, Column*);.#el
24860 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24870 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
24880 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29  iesFromName(T,C)
24890 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
248a0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
248b0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
248c0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b  ,Token*,Token*);
248d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
248e0 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
248f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24900 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
24910 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
24920 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24940 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
24950 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
24960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
24970 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
24980 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  rse*,ExprSpan*);
24990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
249a0 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
249b0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
249c0 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
249d0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
249e0 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74  Token*,u8,Select
249f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
24a00 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
24a10 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
24a20 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
24a50 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
24a60 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  ;.Btree *sqlite3
24a70 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
24a80 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
24a90 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24aa0 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a  CodeOnce(Parse *
24ab0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
24ac0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
24ad0 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  EST.# define sql
24ae0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
24af0 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
24b00 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
24b10 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
24b20 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
24b30 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
24b40 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
24b50 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
24b60 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
24b70 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
24b80 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
24b90 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
24ba0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
24bb0 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
24bc0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
24bd0 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
24be0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
24bf0 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
24c00 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
24c10 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
24c20 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
24c30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24c40 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e  _BUILTIN_TEST.in
24c50 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
24c60 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
24c70 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
24c80 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
24c90 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
24ca0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
24cb0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
24cc0 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
24cd0 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
24ce0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
24cf0 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
24d00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
24d10 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
24d20 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
24d30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
24d40 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
24d50 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
24d60 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
24d70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
24d80 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
24d90 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
24da0 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
24db0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24dc0 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
24dd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
24de0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
24df0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
24e00 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
24e10 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
24e20 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24e30 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
24e40 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
24e50 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
24e60 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
24e70 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
24e80 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
24e90 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
24ea0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
24eb0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
24ec0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
24ed0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
24ee0 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
24ef0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
24f00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24f10 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
24f20 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
24f30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24f40 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
24f50 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
24f60 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
24f70 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
24f80 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
24f90 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
24fa0 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
24fb0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
24fc0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
24fd0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
24fe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
24ff0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
25000 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
25010 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
25020 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
25030 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
25040 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
25050 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
25060 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
25070 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
25080 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
25090 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
250a0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
250b0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
250c0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
250d0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
250e0 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
250f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
25100 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
25110 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
25120 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
25130 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
25140 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
25150 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
25160 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
25170 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
25180 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
25190 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
251a0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
251e0 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
251f0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
25200 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
25210 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
25220 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
25230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
25240 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
25250 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25260 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
25270 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
25280 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
25290 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
252a0 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
252b0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
252c0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
252d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
252e0 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
252f0 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
25300 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
25310 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
25320 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
25330 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
25340 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
25350 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
25360 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
25370 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
25380 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
25390 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
253a0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72  Index *sqlite3Cr
253b0 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
253c0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
253d0 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
253e0 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
25410 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25420 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
25430 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
25440 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25450 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
25460 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
25470 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
25480 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
25490 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
254a0 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
254b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
254e0 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c  List*,u32,Expr*,
254f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
25500 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
25510 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
25520 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
25530 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
25540 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
25550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
25560 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
25570 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
25580 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
25590 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
255a0 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
255b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
255c0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
255d0 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
255e0 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
255f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25600 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
25610 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
25620 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
25630 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
25640 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
25650 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
25660 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
25670 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
25680 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
25690 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
256a0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
256b0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
256c0 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
256d0 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
256e0 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
256f0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
25700 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
25710 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
25720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
25730 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
25740 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
25750 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
25760 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
25770 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
25780 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
25790 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
257a0 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
257b0 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
257c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
257d0 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
257e0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
257f0 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
25800 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
25810 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
25820 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
25830 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
25840 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
25850 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
25860 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20   int*);.#define 
25870 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20  ONEPASS_OFF     
25880 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65   0        /* Use
25890 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20   of ONEPASS not 
258a0 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
258b0 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c  ne ONEPASS_SINGL
258c0 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20  E   1        /* 
258d0 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f  ONEPASS valid fo
258e0 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75  r a single row u
258f0 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pdate */.#define
25900 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20   ONEPASS_MULTI  
25910 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    2        /* ON
25920 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66  EPASS is valid f
25930 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  or multiple rows
25940 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
25950 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65  ExprCodeLoadInde
25960 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  xColumn(Parse*, 
25970 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
25980 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25990 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
259a0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
259b0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
259c0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
259d0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
259e0 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73  ColumnToReg(Pars
259f0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
25a00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
25a10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
25a20 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
25a30 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
25a40 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25a50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25a60 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
25a70 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
25a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25a90 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
25aa0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
25ab0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25ac0 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
25ad0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
25ae0 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
25af0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25b00 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
25b10 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
25b20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25b30 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
25b40 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
25b50 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
25b60 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
25b70 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
25b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25b90 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
25ba0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
25bb0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
25bc0 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78  eCopy(Parse*, Ex
25bd0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
25be0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
25bf0 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
25c00 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
25c10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
25c20 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
25c30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
25c40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25c50 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
25c60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
25c70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25c80 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
25c90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
25ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25cb0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
25cc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
25cd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
25ce0 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
25cf0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
25d00 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
25d10 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
25d20 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
25d30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
25d40 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
25d50 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
25d60 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
25d70 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
25d80 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
25d90 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
25da0 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
25db0 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
25dc0 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
25dd0 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20  erByCol */.void 
25de0 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
25df0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
25e00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
25e10 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
25e20 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
25e30 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25e40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
25e50 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c  FalseDup(Parse*,
25e60 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
25e70 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
25e80 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
25e90 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25ea0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
25eb0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
25ec0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
25ed0 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
25ee0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
25ef0 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
25f00 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
25f10 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
25f20 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
25f30 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
25f40 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
25f50 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
25f60 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25f70 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
25f80 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
25f90 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
25fa0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
25fb0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25fc0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
25fd0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
25fe0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
25ff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
26000 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
26010 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
26020 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
26030 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
26040 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
26050 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
26060 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
26070 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
26080 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
26090 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
260a0 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
260b0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
260c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
260d0 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
260e0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
260f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26100 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
26110 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
26120 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
26130 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
26140 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
26150 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
26160 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
26170 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
26180 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
26190 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
261a0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
261b0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
261c0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
261d0 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65  TEST.void sqlite
261e0 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
261f0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
26200 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
26210 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
26220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
26230 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
26240 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
26250 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
26260 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
26270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
26280 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
26290 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
262a0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
262b0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
262c0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
262d0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
262e0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
262f0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
26300 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
26310 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
26320 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
26330 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
26340 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
26350 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26360 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
26370 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
26380 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
26390 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
263a0 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
263b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
263c0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
263d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
263e0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
263f0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
26400 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
26410 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
26420 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
26430 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
26440 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
26450 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
26460 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
26470 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
26480 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
26490 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
264a0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
264b0 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
264c0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
264d0 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
264e0 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
264f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26500 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
26510 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
26520 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
26530 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
26540 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26550 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
26560 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
26570 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
26580 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
26590 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
265a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
265b0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
265c0 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
265d0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
265e0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
265f0 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
26600 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
26610 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
26620 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
26630 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
26640 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
26650 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
26660 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
26670 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
26680 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
26690 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
266a0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
266b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266d0 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
266e0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69  ,int*,int*);.voi
266f0 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
26700 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
26710 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
26720 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
26730 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
26740 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
26750 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
26760 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
26770 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
26780 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
26790 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
267a0 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
267b0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
267c0 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
267d0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
267e0 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
267f0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
26800 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
26810 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
26820 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
26830 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
26840 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
26850 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
26860 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
26870 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
26880 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
26890 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
268a0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
268b0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
268c0 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
268d0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
268e0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
268f0 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
26900 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
26910 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
26920 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
26930 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
26940 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
26950 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
26960 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
26970 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
26980 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
26990 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
269a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
269b0 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
269c0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
269d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
269e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
269f0 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
26a00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
26a10 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
26a20 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
26a30 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
26a40 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
26a50 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26a60 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
26a70 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
26a80 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
26a90 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
26aa0 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
26ab0 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
26ac0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
26ad0 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
26ae0 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
26af0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
26b00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
26b10 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
26b20 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
26b30 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
26b40 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
26b50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
26b60 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
26b70 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
26b80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26b90 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
26ba0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26bb0 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
26bc0 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
26bd0 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
26be0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
26bf0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
26c00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
26c10 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
26c20 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
26c30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
26c40 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
26c50 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
26c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c70 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
26c80 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
26c90 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
26ca0 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
26cb0 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
26cc0 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
26cd0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
26ce0 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
26cf0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
26d00 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
26d10 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
26d20 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
26d30 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
26d40 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
26d50 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
26d60 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
26d70 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
26d80 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
26d90 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
26da0 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
26db0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
26dc0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
26dd0 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
26de0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
26df0 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
26e20 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26e30 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
26e40 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
26e50 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
26e60 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
26e70 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26e80 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
26e90 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
26ea0 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
26eb0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
26ec0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
26ed0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
26ee0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
26ef0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
26f00 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
26f10 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
26f20 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
26f30 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
26f40 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
26f50 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
26f60 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f90 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
26fa0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
26fb0 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
26fc0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
26fd0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
26fe0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
26ff0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
27000 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
27010 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
27020 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
27030 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
27040 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
27050 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
27060 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
27070 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
27080 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
27090 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
270a0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
270b0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
270c0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
270d0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
270e0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
270f0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
27100 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
27110 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
27120 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
27130 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
27140 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
27150 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
27160 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
27170 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
27180 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
27190 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
271a0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
271b0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
271c0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
271d0 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
271e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
271f0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
27200 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
27210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
27220 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
27230 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
27240 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
27250 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
27260 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
27270 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27280 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
27290 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
272a0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
272b0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
272c0 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
272d0 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
272e0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
272f0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
27300 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
27310 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
27320 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
27330 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
27340 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
27350 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
27360 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
27370 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
27380 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
27390 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
273a0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
273b0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
273c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
273d0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
273e0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
273f0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
27400 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
27410 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
27420 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
27430 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
27440 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
27450 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
27460 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
27470 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
27480 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
27490 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
274a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
274b0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
274c0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
274d0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
274e0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
274f0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
27500 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
27510 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27520 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
27530 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
27540 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
27550 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
27560 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
27570 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
27580 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
27590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
275a0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
275b0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
275c0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
275d0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
275e0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
275f0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27600 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
27610 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
27620 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
27630 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
27640 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
27650 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
27660 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
27670 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
27680 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
27690 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
276a0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
276b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
276c0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
276d0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
276e0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
276f0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
27700 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27710 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
27720 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
27730 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
27740 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
27750 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
27760 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
27770 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
27780 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
27790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
277a0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
277b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
277c0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
277d0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
277e0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
277f0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
27800 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
27810 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
27820 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
27830 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
27840 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
27850 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
27860 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
27870 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
27880 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27890 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
278a0 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
278b0 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
278c0 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
278d0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
278e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
278f0 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
27900 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
27910 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
27920 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
27930 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
27940 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
27950 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
27960 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
27970 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
27980 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  if../*.** Routin
27990 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
279a0 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
279b0 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
279c0 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
279d0 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
279e0 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
279f0 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
27a00 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
27a10 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
27a20 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
27a30 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
27a40 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
27a50 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
27a60 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
27a70 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
27a80 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
27a90 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
27aa0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
27ab0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
27ac0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
27ad0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
27ae0 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
27af0 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
27b00 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
27b10 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
27b20 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
27b30 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
27b40 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
27b50 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
27b60 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
27b70 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
27b80 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
27b90 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
27ba0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
27bb0 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
27bc0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
27bd0 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
27be0 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
27bf0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
27c00 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
27c10 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
27c20 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
27c30 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
27c40 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
27c50 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
27c60 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
27c70 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
27c80 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
27c90 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
27ca0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
27cb0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
27cc0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
27cd0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
27ce0 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
27cf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
27d00 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
27d10 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
27d20 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
27d30 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
27d40 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
27d50 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
27d60 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
27d70 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
27d80 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
27d90 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
27da0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
27db0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
27dc0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
27dd0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
27de0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
27df0 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
27e00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
27e10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27e20 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
27e30 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
27e40 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
27e50 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
27e60 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
27e70 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
27e80 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
27e90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
27ea0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
27eb0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
27ec0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
27ed0 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
27ee0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
27ef0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
27f00 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
27f10 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
27f20 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
27f30 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
27f40 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
27f50 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
27f60 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
27f70 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
27f80 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
27f90 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
27fa0 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
27fb0 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
27fc0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
27fd0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
27fe0 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
27ff0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
28000 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
28010 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
28020 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
28030 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
28040 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
28050 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
28060 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
28070 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
28080 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e  const Token*, in
28090 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
280a0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53  3ExprAddCollateS
280b0 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70  tring(Parse*,Exp
280c0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
280d0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
280e0 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78  prSkipCollate(Ex
280f0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
28100 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
28110 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
28120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
28130 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
28140 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
28150 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
28160 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
28170 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
28180 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
28190 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
281a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
281b0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
281c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
281d0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
281e0 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
281f0 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
28200 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
28210 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
28220 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
28230 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
28240 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
28250 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
28260 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
28270 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
28280 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
28290 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
282a0 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
282b0 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
282c0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
282d0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
282e0 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
282f0 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
28300 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
28310 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
28320 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
28330 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20   *,u8,.         
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
28350 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
28360 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
28370 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
28380 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
28390 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
283a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
283b0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
283c0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
283d0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
283e0 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
283f0 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
28400 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
28410 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
28420 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
28430 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
28440 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
28450 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
28460 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
28470 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
28480 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
28490 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
284a0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
284b0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
284c0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
284d0 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
284e0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
284f0 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72   char sqlite3Str
28500 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e  BINARY[];.extern
28510 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
28520 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
28530 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
28540 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
28550 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
28560 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
28570 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
28580 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
28590 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
285a0 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
285b0 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
285c0 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75  onfig;.extern Fu
285d0 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
285e0 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
285f0 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
28600 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
28610 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
28620 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
28630 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28640 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
28650 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
28660 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28670 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
28680 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
28690 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
286a0 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
286b0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
286c0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
286d0 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
286e0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
286f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
28700 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
28710 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
28720 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
28730 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
28740 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28750 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
28760 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
28770 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
28780 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
28790 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
287a0 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
287b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
287c0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
287d0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
287e0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
287f0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
28800 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
28810 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
28820 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
28830 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
28840 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
28850 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
28860 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
28870 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
28880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
28890 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
288a0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
288b0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
288c0 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
288d0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
288e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
288f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
28900 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
28910 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
28920 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
28930 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
28940 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
28950 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
28960 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
28970 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
28980 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
28990 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
289a0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
289b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
289c0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
289d0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
289e0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
289f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
28a00 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
28a10 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
28a20 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
28a30 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
28a40 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
28a50 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
28a60 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
28a70 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
28a80 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
28a90 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
28aa0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
28ab0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
28ac0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
28ad0 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
28ae0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
28af0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28b00 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
28b10 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
28b20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
28b30 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
28b40 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
28b50 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
28b60 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
28b70 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
28b80 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
28b90 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
28ba0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
28bb0 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
28bc0 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
28bd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
28be0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
28bf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28c00 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
28c10 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
28c20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28c30 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
28c40 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
28c50 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
28c60 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
28c70 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
28c80 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
28c90 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
28ca0 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
28cb0 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
28cc0 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
28cd0 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
28ce0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
28cf0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
28d00 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
28d10 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
28d20 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
28d30 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
28d40 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
28d50 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
28d60 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
28d70 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
28d80 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
28d90 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
28da0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
28db0 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
28dc0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
28dd0 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
28de0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
28df0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
28e00 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
28e10 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
28e20 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
28e30 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
28e40 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
28e50 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
28e60 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
28e70 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
28e80 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
28e90 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
28ea0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f  Destructor.);.vo
28eb0 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
28ec0 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
28ed0 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
28ee0 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
28ef0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
28f00 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
28f10 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
28f20 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
28f30 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
28f40 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
28f50 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
28f60 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
28f70 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28f80 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
28f90 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
28fa0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
28fb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
28fc0 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
28fd0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
28fe0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28ff0 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
29000 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
29010 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
29020 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
29030 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
29040 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
29050 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
29060 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
29070 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
29080 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
29090 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
290a0 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
290b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
290c0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
290d0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
290e0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
290f0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
29100 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
29110 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
29120 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
29130 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
29140 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29150 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
29160 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
29170 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
29180 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
29190 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
291a0 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
291b0 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
291c0 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
291d0 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
291e0 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
291f0 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
29200 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
29210 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
29220 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
29230 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
29240 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
29250 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
29260 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
29270 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
29280 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
29290 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
292a0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
292b0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
292c0 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
292d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
292e0 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
292f0 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
29300 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
29310 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
29320 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
29330 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
29340 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
29350 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
29360 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
29370 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
29380 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
29390 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
293a0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
293b0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
293c0 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
293d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
293e0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
293f0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
29400 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
29410 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
29420 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
29430 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
29440 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
29450 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
29460 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
29470 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
29480 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
29490 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
294a0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
294b0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
294c0 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
294d0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
294e0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
294f0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
29500 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
29510 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
29520 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
29530 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
29540 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
29550 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
29560 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
29570 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
29580 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
29590 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
295a0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
295b0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
295c0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
295d0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
295e0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
295f0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a  ite3VtabLock(X).
29600 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
29610 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
29620 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
29630 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
29640 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
29650 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
29660 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
29670 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
29680 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
29690 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
296a0 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
296b0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
296c0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
296d0 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
296e0 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
296f0 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
29700 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
29710 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
29720 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
29730 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
29740 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
29750 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
29760 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
29770 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
29780 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
29790 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
297a0 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
297b0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
297c0 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
297d0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
297e0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
297f0 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
29800 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
29810 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
29820 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
29830 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
29840 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
29850 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
29860 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
29870 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
29880 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
29890 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
298a0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
298b0 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
298c0 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
298d0 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69  ans==0).#endif.i
298e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  nt sqlite3VtabEp
298f0 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74  onymousTableInit
29900 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29  (Parse*,Module*)
29910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
29920 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
29930 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d  Clear(sqlite3*,M
29940 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
29950 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69  lite3VtabMakeWri
29960 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62  table(Parse*,Tab
29970 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
29980 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65  e3VtabBeginParse
29990 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
299a0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
299b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
299c0 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72  te3VtabFinishPar
299d0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
299e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
299f0 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73  VtabArgInit(Pars
29a00 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
29a10 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50  3VtabArgExtend(P
29a20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
29a30 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
29a40 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  allCreate(sqlite
29a50 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
29a60 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  har *, char **);
29a70 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
29a80 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73  CallConnect(Pars
29a90 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e*, Table*);.int
29aa0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
29ab0 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a  Destroy(sqlite3*
29ac0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
29ad0 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
29ae0 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74  3VtabBegin(sqlit
29af0 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b  e3 *, VTable *);
29b00 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
29b10 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e  3VtabOverloadFun
29b20 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c  ction(sqlite3 *,
29b30 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41  FuncDef*, int nA
29b40 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  rg, Expr*);.void
29b50 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46   sqlite3InvalidF
29b60 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  unction(sqlite3_
29b70 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
29b80 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73  ite3_value**);.s
29b90 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
29ba0 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
29bb0 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
29bc0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
29bd0 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
29be0 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
29bf0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
29c00 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
29c10 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
29c20 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
29c30 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
29c40 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
29c50 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  set(Parse*);.int
29c60 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
29c70 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
29c80 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
29c90 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
29ca0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
29cb0 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
29cc0 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
29cd0 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
29ce0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
29cf0 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
29d00 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
29d10 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
29d20 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
29d30 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
29d40 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
29d50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29d60 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
29d70 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
29d80 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
29d90 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
29da0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
29db0 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
29dc0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
29dd0 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
29de0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29df0 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20  OMIT_CTE.  With 
29e00 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28  *sqlite3WithAdd(
29e10 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b  Parse*,With*,Tok
29e20 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
29e30 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  lect*);.  void s
29e40 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
29e50 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29  (sqlite3*,With*)
29e60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29e70 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c  WithPush(Parse*,
29e80 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c   With*, u8);.#el
29e90 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
29ea0 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a  e3WithPush(x,y,z
29eb0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
29ec0 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29  3WithDelete(x,y)
29ed0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c  .#endif../* Decl
29ee0 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
29ef0 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
29f00 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
29f10 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
29f20 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
29f30 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
29f40 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
29f50 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
29f60 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
29f70 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
29f80 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
29f90 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
29fa0 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
29fb0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
29fc0 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
29fd0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
29fe0 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
29ff0 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
2a000 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
2a010 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
2a020 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
2a030 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20   is.** provided 
2a040 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
2a050 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
2a060 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
2a070 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
2a080 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2a090 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
2a0a0 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
2a0b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2a0c0 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
2a0d0 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
2a0e0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2a0f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2a100 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2a110 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2a120 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2a130 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
2a140 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
2a150 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
2a160 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
2a170 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2a180 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2a190 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
2a1a0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
2a1b0 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
2a1c0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
2a1d0 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
2a1e0 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
2a1f0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
2a200 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2a210 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
2a220 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
2a230 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2a240 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
2a250 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2a260 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
2a270 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
2a280 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
2a290 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
2a2a0 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2a2b0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2a2c0 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
2a2d0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2a2e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2a2f0 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
2a300 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
2a310 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
2a320 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2a330 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
2a340 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
2a350 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
2a360 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2a370 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2a380 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
2a390 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2a3a0 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
2a3b0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
2a3c0 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
2a3d0 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
2a3e0 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
2a3f0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
2a400 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2a410 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2a420 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
2a430 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2a440 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
2a450 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
2a460 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2a470 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
2a480 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
2a490 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
2a4a0 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
2a4b0 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
2a4c0 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
2a4d0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
2a4e0 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
2a4f0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
2a500 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a510 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
2a520 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2a530 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2a540 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2a550 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2a560 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2a570 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2a580 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2a590 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2a5a0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2a5b0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2a5c0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2a5d0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2a5e0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2a5f0 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2a600 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2a610 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2a620 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2a630 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2a640 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2a650 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2a660 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2a670 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2a680 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2a690 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2a6a0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2a6b0 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2a6c0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2a6d0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2a6e0 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2a6f0 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2a700 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2a710 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2a720 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2a730 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2a740 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2a750 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2a760 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2a770 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2a780 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2a790 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2a7a0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2a7b0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2a7c0 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2a7d0 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2a7e0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2a7f0 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2a800 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2a810 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2a820 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2a830 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2a840 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2a850 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2a860 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2a870 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2a880 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2a890 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2a8a0 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74  nt*);..int sqlit
2a8b0 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
2a8c0 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
2a8d0 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
2a8e0 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
2a8f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a900 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
2a910 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66  ite3_vfs *);.#if
2a920 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2a930 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
2a940 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
2a950 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
2a960 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69  3_file *);.#endi
2a970 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2a980 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28  urnalIsInMemory(
2a990 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
2a9a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
2a9b0 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
2a9c0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76  ite3_file *);..v
2a9d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
2a9e0 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73  etHeightAndFlags
2a9f0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2aa00 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51  Expr *p);.#if SQ
2aa10 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
2aa20 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69  PTH>0.  int sqli
2aa30 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
2aa40 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
2aa50 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
2aa60 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
2aa70 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
2aa80 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2aa90 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2aaa0 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
2aab0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2aac0 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
2aad0 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
2aae0 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
2aaf0 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
2ab00 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
2ab10 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
2ab20 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
2ab30 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
2ab40 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2ab50 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
2ab60 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
2ab70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2ab80 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
2ab90 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2aba0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2abb0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
2abc0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
2abd0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2abe0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2abf0 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
2ac00 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2ac10 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
2ac20 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2ac30 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
2ac40 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
2ac50 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2ac60 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
2ac70 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
2ac80 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
2ac90 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
2aca0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
2acb0 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
2acc0 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
2acd0 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
2ace0 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
2acf0 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
2ad00 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
2ad10 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
2ad20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
2ad30 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ages..*/.#ifdef 
2ad40 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
2ad50 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
2ad60 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
2ad70 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
2ad80 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2ad90 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
2ada0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
2adb0 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
2adc0 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45  _API SQLITE_EXTE
2add0 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  RN void (SQLITE_
2ade0 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
2adf0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
2ae00 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
2ae10 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
2ae20 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
2ae30 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
2ae40 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
2ae50 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
2ae60 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
2ae70 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
2ae80 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
2ae90 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
2aea0 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
2aeb0 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
2aec0 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
2aed0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
2aee0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
2aef0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
2af00 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
2af10 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
2af20 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
2af30 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
2af40 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
2af50 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
2af60 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
2af70 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
2af80 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
2af90 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
2afa0 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
2afb0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
2afc0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2afd0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
2afe0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
2aff0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
2b000 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
2b010 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
2b020 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
2b030 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
2b040 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
2b050 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2b060 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
2b070 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
2b080 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
2b090 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
2b0a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
2b0b0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
2b0c0 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
2b0d0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
2b0e0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
2b0f0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
2b100 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
2b110 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
2b120 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
2b130 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
2b140 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
2b150 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
2b160 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
2b170 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
2b180 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
2b190 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
2b1a0 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
2b1b0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
2b1c0 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
2b1d0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2b1e0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
2b1f0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
2b200 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
2b210 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
2b220 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
2b230 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
2b240 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
2b250 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
2b260 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
2b270 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2b280 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
2b290 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
2b2a0 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
2b2b0 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
2b2c0 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
2b2d0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
2b2e0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
2b2f0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
2b300 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
2b310 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
2b320 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
2b330 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
2b340 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  aint..**.** All 
2b350 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
2b360 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
2b370 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
2b380 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
2b390 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
2b3a0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
2b3b0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2b3c0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
2b3d0 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
2b3e0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2b3f0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2b400 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
2b410 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
2b420 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
2b430 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
2b440 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2b450 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
2b460 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2b470 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2b480 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
2b490 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
2b4a0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2b4b0 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
2b4c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2b4d0 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
2b4e0 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
2b4f0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
2b500 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
2b510 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
2b520 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
2b530 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
2b540 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
2b550 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20  Heap that might 
2b560 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
2b570 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ide */.#define M
2b580 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20  EMTYPE_SCRATCH  
2b590 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74    0x04  /* Scrat
2b5a0 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ch allocations *
2b5b0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2b5c0 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2b5d0 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  8  /* Page cache
2b5e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2b5f0 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2b600 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2b610 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2b620 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2b630 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2b640 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2b650 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2b660 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2b670 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2b680 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2b690 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
2b6a0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
2b6b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
2b6c0 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
2b6d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2b6e0 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
2b6f0 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
2b700 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  te3*);.#endif..#
2b710 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45  endif /* _SQLITE
2b720 49 4e 54 5f 48 5f 20 2a 2f 0a                    INT_H_ */.