/ Hex Artifact Content
Login

Artifact 8da202a3a7874497db07fae72c1f94ca6522a6c3:


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 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
19a0: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
19b0: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
19c0: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
19d0: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
19e0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
19f0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1a00: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1a10: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
1a20: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
1a30: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
1a40: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
1a50: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
1a60: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1a70: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1a80: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1a90: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1aa0: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1ab0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
1ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
1ad0: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
1ae0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
1af0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
1b00: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
1b10: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
1b20: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
1b30: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
1b40: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
1b50: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
1b60: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1b70: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1b80: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
1b90: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1ba0: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1bb0: 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  300.#    if !def
1bc0: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
1bd0: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
1be0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
1bf0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1c00: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
1c10: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
1c20: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
1c30: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
1c40: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
1c50: 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74 65  insic(_ReadWrite
1c60: 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65 6c  Barrier).#    el
1c70: 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64  se.#      includ
1c80: 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a  e <cmnintrin.h>.
1c90: 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6e  #    endif.#  en
1ca0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  dif.#endif../*.*
1cb0: 2a 20 54 68 65 20 4d 53 56 43 20 43 52 54 20 6f  * The MSVC CRT o
1cc0: 6e 20 57 69 6e 64 6f 77 73 20 43 45 20 6d 61 79  n Windows CE may
1cd0: 20 6e 6f 74 20 68 61 76 65 20 61 20 6c 6f 63 61   not have a loca
1ce0: 6c 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ltime() function
1cf0: 2e 20 20 53 6f 0a 2a 2a 20 64 65 63 6c 61 72 65  .  So.** declare
1d00: 20 61 20 73 75 62 73 74 69 74 75 74 65 2e 20 20   a substitute.  
1d10: 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 74 73  The function its
1d20: 65 6c 66 20 69 73 20 64 65 66 69 6e 65 64 20 69  elf is defined i
1d30: 6e 20 22 6f 73 5f 77 69 6e 2e 63 22 2e 0a 2a 2f  n "os_win.c"..*/
1d40: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
1d50: 4e 33 32 5f 57 43 45 29 20 26 26 20 5c 0a 20 20  N32_WCE) && \.  
1d60: 20 20 28 21 64 65 66 69 6e 65 64 28 53 51 4c 49    (!defined(SQLI
1d70: 54 45 5f 4d 53 56 43 5f 4c 4f 43 41 4c 54 49 4d  TE_MSVC_LOCALTIM
1d80: 45 5f 41 50 49 29 20 7c 7c 20 21 53 51 4c 49 54  E_API) || !SQLIT
1d90: 45 5f 4d 53 56 43 5f 4c 4f 43 41 4c 54 49 4d 45  E_MSVC_LOCALTIME
1da0: 5f 41 50 49 29 0a 23 20 20 69 6e 63 6c 75 64 65  _API).#  include
1db0: 20 3c 74 69 6d 65 2e 68 3e 0a 73 74 72 75 63 74   <time.h>.struct
1dc0: 20 74 6d 20 2a 5f 5f 63 64 65 63 6c 20 6c 6f 63   tm *__cdecl loc
1dd0: 61 6c 74 69 6d 65 28 63 6f 6e 73 74 20 74 69 6d  altime(const tim
1de0: 65 5f 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  e_t *);.#endif..
1df0: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
1e00: 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72  _THREADSAFE macr
1e10: 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65  o must be define
1e20: 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e  d as 0, 1, or 2.
1e30: 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65  .** 0 means mute
1e40: 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e  xes are permanen
1e50: 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20  tly disable and 
1e60: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e  the library is n
1e70: 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61  ever.** threadsa
1e80: 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65  fe.  1 means the
1e90: 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69   library is seri
1ea0: 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20  alized which is 
1eb0: 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c  the highest.** l
1ec0: 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61  evel of threadsa
1ed0: 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74  fety.  2 means t
1ee0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75  he library is mu
1ef0: 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75  ltithreaded - mu
1f00: 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64  ltiple.** thread
1f10: 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65  s can use SQLite
1f20: 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74   as long as no t
1f30: 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74  wo threads try t
1f40: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a  o use the same.*
1f50: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
1f60: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d  ction at the sam
1f70: 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c  e time..**.** Ol
1f80: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
1f90: 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f  SQLite used an o
1fa0: 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41  ptional THREADSA
1fb0: 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20  FE macro..** We 
1fc0: 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72  support that for
1fd0: 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20   legacy..*/.#if 
1fe0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1ff0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66  THREADSAFE).# if
2000: 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53   defined(THREADS
2010: 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20  AFE).#   define 
2020: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
2030: 45 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65  E THREADSAFE.# e
2040: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
2050: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
2060: 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32   1 /* IMP: R-072
2070: 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e  72-22309 */.# en
2080: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  dif.#endif../*.*
2090: 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72  * Powersafe over
20a0: 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64  write is on by d
20b0: 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e  efault.  But can
20c0: 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75   be turned off u
20d0: 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51  sing.** the -DSQ
20e0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
20f0: 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61  VERWRITE=0 comma
2100: 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a  nd-line option..
2110: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2120: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
2130: 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53  WRITE.# define S
2140: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
2150: 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64  OVERWRITE 1.#end
2160: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e  if../*.** EVIDEN
2170: 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33  CE-OF: R-25715-3
2180: 37 30 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f  7072 Memory allo
2190: 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  cation statistic
21a0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 62 79  s are enabled by
21b0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c 65  .** default unle
21c0: 73 73 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  ss SQLite is com
21d0: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
21e0: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
21f0: 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63  TUS=0 in.** whic
2200: 68 20 63 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c  h case memory al
2210: 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74  location statist
2220: 69 63 73 20 61 72 65 20 64 69 73 61 62 6c 65 64  ics are disabled
2230: 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a   by default..*/.
2240: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2250: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2260: 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20  TATUS).# define 
2270: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2280: 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69  EMSTATUS 1.#endi
2290: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79  f../*.** Exactly
22a0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
22b0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73  owing macros mus
22c0: 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20  t be defined in 
22d0: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63  order to.** spec
22e0: 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79  ify which memory
22f0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73   allocation subs
2300: 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a  ystem to use..**
2310: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53  .**     SQLITE_S
2320: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20  YSTEM_MALLOC    
2330: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72        // Use nor
2340: 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  mal system mallo
2350: 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  c().**     SQLIT
2360: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20  E_WIN32_MALLOC  
2370: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2380: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
2390: 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c  p API.**     SQL
23a0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20  ITE_ZERO_MALLOC 
23b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
23c0: 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74  e a stub allocat
23d0: 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20 66  or that always f
23e0: 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ails.**     SQLI
23f0: 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20  TE_MEMDEBUG     
2400: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62            // Deb
2410: 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f  ugging version o
2420: 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  f system malloc(
2430: 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f  ).**.** On Windo
2440: 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54  ws, if the SQLIT
2450: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56  E_WIN32_MALLOC_V
2460: 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73  ALIDATE macro is
2470: 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65   defined and the
2480: 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63  .** assert() mac
2490: 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65  ro is enabled, e
24a0: 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  ach call into th
24b0: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
24c0: 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a  eap subsystem.**
24d0: 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70   will cause Heap
24e0: 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63  Validate to be c
24f0: 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20  alled.  If heap 
2500: 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c  validation shoul
2510: 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73  d fail, an.** as
2520: 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  sertion will be 
2530: 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  triggered..**.**
2540: 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   If none of the 
2550: 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e 65  above are define
2560: 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c 49  d, then set SQLI
2570: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2580: 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61 75   as.** the defau
2590: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  lt..*/.#if defin
25a0: 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ed(SQLITE_SYSTEM
25b0: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
25c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49  efined(SQLITE_WI
25d0: 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  N32_MALLOC) \.  
25e0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
25f0: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  _ZERO_MALLOC) \.
2600: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2610: 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23  TE_MEMDEBUG)>1.#
2620: 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d   error "Two or m
2630: 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  ore of the follo
2640: 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  wing compile-tim
2650: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
2660: 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65  options\. are de
2670: 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f 73  fined but at mos
2680: 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64  t one is allowed
2690: 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54 45  :\. SQLITE_SYSTE
26a0: 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  M_MALLOC, SQLITE
26b0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53  _WIN32_MALLOC, S
26c0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c  QLITE_MEMDEBUG,\
26d0: 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41  . SQLITE_ZERO_MA
26e0: 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69 66  LLOC".#endif.#if
26f0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2700: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2710: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2720: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2730: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2740: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2750: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2760: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2770: 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 53  G)==0.# define S
2780: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2790: 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LOC 1.#endif../*
27a0: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d 41  .** If SQLITE_MA
27b0: 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20  LLOC_SOFT_LIMIT 
27c0: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
27d0: 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74 68  n try to keep th
27e0: 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65  e.** sizes of me
27f0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
2800: 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c 75   below this valu
2810: 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65  e where possible
2820: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2830: 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  d(SQLITE_MALLOC_
2840: 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65  SOFT_LIMIT).# de
2850: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c  fine SQLITE_MALL
2860: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30  OC_SOFT_LIMIT 10
2870: 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  24.#endif../*.**
2880: 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 69   We need to defi
2890: 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ne _XOPEN_SOURCE
28a0: 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f   as follows in o
28b0: 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a  rder to enable.*
28c0: 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74 65  * recursive mute
28d0: 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78  xes on most Unix
28e0: 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63 68   systems and fch
28f0: 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44  mod() on OpenBSD
2900: 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f  ..** But _XOPEN_
2910: 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61  SOURCE define ca
2920: 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f  uses problems fo
2930: 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f  r Mac OS X, so o
2940: 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69  mit.** it..*/.#i
2950: 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50 45  f !defined(_XOPE
2960: 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64 65  N_SOURCE) && !de
2970: 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f  fined(__DARWIN__
2980: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f  ) && !defined(__
2990: 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69  APPLE__).#  defi
29a0: 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ne _XOPEN_SOURCE
29b0: 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   600.#endif../*.
29c0: 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51  ** NDEBUG and SQ
29d0: 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f  LITE_DEBUG are o
29e0: 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68  pposites.  It sh
29f0: 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74  ould always be t
2a00: 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  rue that.** defi
2a10: 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65  ned(NDEBUG)==!de
2a20: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2a30: 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69 73  UG).  If this is
2a40: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74   not currently t
2a50: 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  rue,.** make it 
2a60: 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67  true by defining
2a70: 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e   or undefining N
2a80: 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74  DEBUG..**.** Set
2a90: 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65  ting NDEBUG make
2aa0: 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c  s the code small
2ab0: 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62 79  er and faster by
2ac0: 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a   disabling the.*
2ad0: 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  * assert() state
2ae0: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
2af0: 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20 74  e.  So we want t
2b00: 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
2b10: 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e  n.** to be for N
2b20: 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74 20  DEBUG to be set 
2b30: 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62 65  and NDEBUG to be
2b40: 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20   undefined only 
2b50: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
2b60: 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75 73  ** is set.  Thus
2b70: 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20   NDEBUG becomes 
2b80: 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72  an opt-in rather
2b90: 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74   than an opt-out
2ba0: 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  .** feature..*/.
2bb0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  #if !defined(NDE
2bc0: 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65 64  BUG) && !defined
2bd0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2be0: 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31   define NDEBUG 1
2bf0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2c00: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 64  ned(NDEBUG) && d
2c10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2c20: 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44 45  BUG).# undef NDE
2c30: 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  BUG.#endif../*.*
2c40: 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f  * Enable SQLITE_
2c50: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
2c60: 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49 54  OMMENTS if SQLIT
2c70: 45 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e 65  E_DEBUG is turne
2c80: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  d on..*/.#if !de
2c90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2ca0: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2cb0: 45 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65 64  ENTS) && defined
2cc0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2cd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
2ce0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
2cf0: 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a  MMENTS 1.#endif.
2d00: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63  ./*.** The testc
2d10: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75  ase() macro is u
2d20: 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f  sed to aid in co
2d30: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20  verage testing. 
2d40: 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63   When.** doing c
2d50: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c  overage testing,
2d60: 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69   the condition i
2d70: 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65  nside the argume
2d80: 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73  nt to.** testcas
2d90: 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c  e() must be eval
2da0: 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65 20  uated both true 
2db0: 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64  and false in ord
2dc0: 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c  er to.** get ful
2dd0: 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67  l branch coverag
2de0: 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73 65  e.  The testcase
2df0: 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65  () macro is inse
2e00: 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20  rted.** to help 
2e10: 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65 20  ensure adequate 
2e20: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e  test coverage in
2e30: 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73 69   places where si
2e40: 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f  mple.** conditio
2e50: 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72  n/decision cover
2e60: 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61 74  age is inadequat
2e70: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
2e80: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
2e90: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
2ea0: 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79  ke sure boundary
2eb0: 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73 74   values are test
2ec0: 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d  ed.  For.** bitm
2ed0: 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63  ask tests, testc
2ee0: 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73 65  ase() can be use
2ef0: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65  d to make sure e
2f00: 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69  ach bit.** is si
2f10: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73  gnificant and us
2f20: 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
2f30: 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61  .  On switch sta
2f40: 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65  tements.** where
2f50: 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20   multiple cases 
2f60: 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62  go to the same b
2f70: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65  lock of code, te
2f80: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2f90: 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20  insure that all 
2fa0: 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75 61  cases are evalua
2fb0: 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65  ted..**.*/.#ifde
2fc0: 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  f SQLITE_COVERAG
2fd0: 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  E_TEST.  void sq
2fe0: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e  lite3Coverage(in
2ff0: 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73  t);.# define tes
3000: 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20  tcase(X)  if( X 
3010: 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  ){ sqlite3Covera
3020: 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a  ge(__LINE__); }.
3030: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74  #else.# define t
3040: 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69  estcase(X).#endi
3050: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53  f../*.** The TES
3060: 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75  TONLY macro is u
3070: 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76  sed to enclose v
3080: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
3090: 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72  ions or.** other
30a0: 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68   bits of code th
30b0: 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f  at are needed to
30c0: 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72 67   support the arg
30d0: 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e  uments.** within
30e0: 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64 20   testcase() and 
30f0: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e  assert() macros.
3100: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
3110: 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  (NDEBUG) || defi
3120: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
3130: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
3140: 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20  ne TESTONLY(X)  
3150: 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  X.#else.# define
3160: 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e   TESTONLY(X).#en
3170: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74  dif../*.** Somet
3180: 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20 73  imes we need a s
3190: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63  mall amount of c
31a0: 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76 61  ode such as a va
31b0: 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a  riable initializ
31c0: 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75  ation.** to setu
31d0: 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73  p for a later as
31e0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
31f0: 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e  .  We do not wan
3200: 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a  t this code to.*
3210: 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61 73  * appear when as
3220: 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c  sert() is disabl
3230: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
3240: 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72  ng macro is ther
3250: 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  efore.** used to
3260: 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65   contain that se
3270: 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22  tup code.  The "
3280: 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61  VVA" acronym sta
3290: 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69  nds for.** "Veri
32a0: 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
32b0: 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64  tion, and Accred
32c0: 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74  itation".  In ot
32d0: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a  her words, the.*
32e0: 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56  * code within VV
32f0: 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e  A_ONLY() will on
3300: 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65  ly run during ve
3310: 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65  rification proce
3320: 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  sses..*/.#ifndef
3330: 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65   NDEBUG.# define
3340: 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a   VVA_ONLY(X)  X.
3350: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56  #else.# define V
3360: 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  VA_ONLY(X).#endi
3370: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57  f../*.** The ALW
3380: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61  AYS and NEVER ma
3390: 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f  cros surround bo
33a0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
33b0: 73 20 77 68 69 63 68 0a 2a 2a 20 61 72 65 20 69  s which.** are i
33c0: 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79  ntended to alway
33d0: 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c  s be true or fal
33e0: 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  se, respectively
33f0: 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65  .  Such.** expre
3400: 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20  ssions could be 
3410: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
3420: 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79   code completely
3430: 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61  .  But they.** a
3440: 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61  re included in a
3450: 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72   few cases in or
3460: 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74  der to enhance t
3470: 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a  he resilience.**
3480: 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e   of SQLite to un
3490: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
34a0: 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20  r - to make the 
34b0: 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69  code "self-heali
34c0: 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69  ng".** or "ducti
34d0: 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20  le" rather than 
34e0: 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20  being "brittle" 
34f0: 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20  and crashing at 
3500: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e  the first.** hin
3510: 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62  t of unplanned b
3520: 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49  ehavior..**.** I
3530: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41  n other words, A
3540: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
3550: 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65  are added for de
3560: 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a  fensive code..**
3570: 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63  .** When doing c
3580: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20  overage testing 
3590: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
35a0: 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20   are hard-coded 
35b0: 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e  to.** be true an
35c0: 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20  d false so that 
35d0: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
35e0: 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69 66  code they specif
35f0: 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65  y will.** not be
3600: 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65   counted as unte
3610: 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69  sted code..*/.#i
3620: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3630: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
3640: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
3650: 58 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65  X)      (1).# de
3660: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
3670: 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64      (0).#elif !d
3680: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23  efined(NDEBUG).#
3690: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
36a0: 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61  )      ((X)?1:(a
36b0: 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64  ssert(0),0)).# d
36c0: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
36d0: 20 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72       ((X)?(asser
36e0: 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65  t(0),1):0).#else
36f0: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3700: 28 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64  (X)      (X).# d
3710: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
3720: 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a       (X).#endif.
3730: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c  ./*.** Some mall
3740: 6f 63 20 66 61 69 6c 75 72 65 73 20 61 72 65 20  oc failures are 
3750: 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66  only possible if
3760: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3770: 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a  LLOC_STRESS is.*
3780: 2a 20 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e  * defined.  We n
3790: 65 65 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67  eed to defend ag
37a0: 61 69 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c  ainst those fail
37b0: 75 72 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e  ures when testin
37c0: 67 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  g with.** SQLITE
37d0: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
37e0: 52 45 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e  RESS, but we don
37f0: 27 74 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65  't want the unre
3800: 61 63 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73  achable branches
3810: 0a 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72  .** during a nor
3820: 6d 61 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20  mal build.  The 
3830: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3840: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64  can be used to d
3850: 69 73 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20  isable tests.** 
3860: 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
3870: 66 61 6c 73 65 20 65 78 63 65 70 74 20 77 68 65  false except whe
3880: 6e 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  n SQLITE_TEST_RE
3890: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20  ALLOC_STRESS is 
38a0: 73 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  set..*/.#if defi
38b0: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f  ned(SQLITE_TEST_
38c0: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a  REALLOC_STRESS).
38d0: 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46  # define ONLY_IF
38e0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
38f0: 58 29 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64  X)  (X).#elif !d
3900: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23  efined(NDEBUG).#
3910: 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f   define ONLY_IF_
3920: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58  REALLOC_STRESS(X
3930: 29 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28  )  ((X)?(assert(
3940: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3950: 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f   define ONLY_IF_
3960: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58  REALLOC_STRESS(X
3970: 29 20 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  )  (0).#endif../
3980: 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  *.** Declaration
3990: 73 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69  s used for traci
39a0: 6e 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67  ng the operating
39b0: 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63   system interfac
39c0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  es..*/.#if defin
39d0: 65 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f  ed(SQLITE_FORCE_
39e0: 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66  OS_TRACE) || def
39f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
3a00: 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
3a10: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3a20: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
3a30: 49 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  IN).  extern int
3a40: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b   sqlite3OSTrace;
3a50: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
3a60: 45 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66  E(X)          if
3a70: 28 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65  ( sqlite3OSTrace
3a80: 20 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50   ) sqlite3DebugP
3a90: 72 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65  rintf X.# define
3aa0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
3ab0: 54 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65  TRACE.#else.# de
3ac0: 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a  fine OSTRACE(X).
3ad0: 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  # undef  SQLITE_
3ae0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
3af0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74  ndif../*.** Is t
3b00: 68 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  he sqlite3ErrNam
3b10: 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65  e() function nee
3b20: 64 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64  ded in the build
3b30: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a  ?  Currently,.**
3b40: 20 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79   it is needed by
3b50: 20 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28   "mutex_w32.c" (
3b60: 77 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c  when debugging),
3b70: 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65   "os_win.c" (whe
3b80: 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20  n.** OSTRACE is 
3b90: 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79  enabled), and by
3ba0: 20 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e   several "test*.
3bb0: 63 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20  c" files (which 
3bc0: 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20  are.** compiled 
3bd0: 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
3be0: 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  T)..*/.#if defin
3bf0: 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
3c00: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
3c10: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
3c20: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
3c30: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
3c40: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
3c50: 4e 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  N).# define SQLI
3c60: 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
3c70: 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20  .#else.# undef  
3c80: 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
3c90: 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NAME.#endif../*.
3ca0: 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
3cb0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3cc0: 53 20 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c  S is incompatibl
3cd0: 65 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d  e with SQLITE_OM
3ce0: 49 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69  IT_EXPLAIN.*/.#i
3cf0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
3d00: 5f 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66  _EXPLAIN.# undef
3d10: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45   SQLITE_ENABLE_E
3d20: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a  XPLAIN_COMMENTS.
3d30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
3d40: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
3d50: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
3d60: 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  t is an integer 
3d70: 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67  that is too larg
3d80: 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33  e.** to fit in 3
3d90: 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61  2-bits.  This ma
3da0: 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
3db0: 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65  de of various te
3dc0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72  stcase().** macr
3dd0: 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  os to verify tha
3de0: 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64  t we have tested
3df0: 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67   SQLite for larg
3e00: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a  e-file support..
3e10: 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49  */.#define IS_BI
3e20: 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26  G_INT(X)  (((X)&
3e30: 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66  ~(i64)0xffffffff
3e40: 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )!=0)../*.** The
3e50: 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28   macro unlikely(
3e60: 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74  ) is a hint that
3e70: 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f   surrounds a boo
3e80: 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  lean.** expressi
3e90: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3ea0: 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f  ly false.  Macro
3eb0: 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75   likely() surrou
3ec0: 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e  nds.** a boolean
3ed0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
3ee0: 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
3ef0: 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20 63  .  These hints c
3f00: 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f  ould,.** in theo
3f10: 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20 74  ry, be used by t
3f20: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67  he compiler to g
3f30: 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20 63  enerate better c
3f40: 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72  ode, but.** curr
3f50: 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a  ently they are j
3f60: 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ust comments for
3f70: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a   human readers..
3f80: 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c  */.#define likel
3f90: 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65 66  y(X)    (X).#def
3fa0: 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  ine unlikely(X) 
3fb0: 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22   (X)..#include "
3fc0: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
3fd0: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
3fe0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
3ff0: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
4000: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
4010: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
4020: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
4030: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
4040: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
4050: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
4060: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
4070: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
4080: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
4090: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
40a0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
40b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
40c0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
40d0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
40e0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
40f0: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
4100: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
4110: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
4120: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
4130: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
4140: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
4150: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
4160: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
4170: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
4180: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
4190: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
41a0: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
41b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
41c0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
41d0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
41e0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
41f0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
4200: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
4210: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4220: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
4230: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
4240: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
4250: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
4260: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
4270: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
4280: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
4290: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
42a0: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
42b0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
42c0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
42d0: 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74  piler.** to omit
42e0: 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54 45   code used by TE
42f0: 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75  MP tables withou
4300: 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20  t messy #ifndef 
4310: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23  statements..*/.#
4320: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
4330: 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65  T_TEMPDB.#define
4340: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23   OMIT_TEMPDB 1.#
4350: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49  else.#define OMI
4360: 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69  T_TEMPDB 0.#endi
4370: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69  f../*.** The "fi
4380: 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65  le format" numbe
4390: 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  r is an integer 
43a0: 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  that is incremen
43b0: 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20  ted whenever.** 
43c0: 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66  the VDBE-level f
43d0: 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67  ile format chang
43e0: 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  es.  The followi
43f0: 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ng macros define
4400: 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61   the.** the defa
4410: 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  ult file format 
4420: 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73 65  for new database
4430: 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75  s and the maximu
4440: 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a  m file format.**
4450: 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72   that the librar
4460: 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23  y can read..*/.#
4470: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4480: 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  X_FILE_FORMAT 4.
4490: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
44a0: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
44b0: 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  AT.# define SQLI
44c0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
44d0: 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a  FORMAT 4.#endif.
44e0: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
44f0: 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65 72   whether trigger
4500: 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65 20  s are recursive 
4510: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69  by default.  Thi
4520: 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e  s can be.** chan
4530: 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ged at run-time 
4540: 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a  using a pragma..
4550: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4560: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
4570: 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64  IVE_TRIGGERS.# d
4580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4590: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
45a0: 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66  RIGGERS 0.#endif
45b0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20  ../*.** Provide 
45c0: 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  a default value 
45d0: 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  for SQLITE_TEMP_
45e0: 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74  STORE in case it
45f0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
4600: 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  d.** on the comm
4610: 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e  and-line.*/.#ifn
4620: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  def SQLITE_TEMP_
4630: 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53  STORE.# define S
4640: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4650: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
4660: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63  TE_TEMP_STORE_xc
4670: 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66   1  /* Exclude f
4680: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
4690: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
46a0: 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65  no value has bee
46b0: 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53  n provided for S
46c0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
46d0: 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a  _THREADS, or if.
46e0: 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ** SQLITE_TEMP_S
46f0: 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33  TORE is set to 3
4700: 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70   (never use temp
4710: 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65  orary files), se
4720: 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e  t it.** to zero.
4730: 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54  .*/.#if SQLITE_T
4740: 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20  EMP_STORE==3 || 
4750: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
4760: 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c  E==0.# undef SQL
4770: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4780: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4790: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
47a0: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
47b0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
47c0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
47d0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
47e0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
47f0: 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66  THREADS 8.#endif
4800: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4810: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
4820: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4830: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4840: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
4850: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
4860: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4870: 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f  _THREADS>SQLITE_
4880: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4890: 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  DS.# undef 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 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
48c0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
48d0: 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44  THREADS SQLITE_D
48e0: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
48f0: 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a  READS.#endif../*
4900: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
4910: 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69  initial allocati
4920: 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63  on for the pagec
4930: 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20  ache when using 
4940: 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65  separate.** page
4950: 63 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20  caches for each 
4960: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
4970: 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65  ion.  A positive
4980: 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a   number is the.*
4990: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
49a0: 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e  s.  A negative n
49b0: 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74  umber N translat
49c0: 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20  ions means that 
49d0: 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d  a buffer.** of -
49e0: 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20  1024*N bytes is 
49f0: 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73  allocated and us
4a00: 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70  ed for as many p
4a10: 61 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20  ages as it will 
4a20: 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  hold..*/.#ifndef
4a30: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4a40: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
4a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
4a60: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
4a70: 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a  TSZ 100.#endif..
4a80: 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e  /*.** GCC does n
4a90: 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66  ot define the of
4aa0: 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73  fsetof() macro s
4ab0: 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20  o we'll have to 
4ac0: 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76  do it.** ourselv
4ad0: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f  es..*/.#ifndef o
4ae0: 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20  ffsetof.#define 
4af0: 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55  offsetof(STRUCTU
4b00: 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29  RE,FIELD) ((int)
4b10: 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43  ((char*)&((STRUC
4b20: 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29  TURE*)0)->FIELD)
4b30: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4b40: 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74  Macros to comput
4b50: 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61  e minimum and ma
4b60: 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d  ximum of two num
4b70: 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bers..*/.#ifndef
4b80: 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49   MIN.# define MI
4b90: 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f  N(A,B) ((A)<(B)?
4ba0: 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a  (A):(B)).#endif.
4bb0: 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65  #ifndef MAX.# de
4bc0: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
4bd0: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
4be0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77  #endif../*.** Sw
4bf0: 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f  ap two objects o
4c00: 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a  f type TYPE..*/.
4c10: 23 64 65 66 69 6e 65 20 53 57 41 50 28 54 59 50  #define SWAP(TYP
4c20: 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41  E,A,B) {TYPE t=A
4c30: 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a  ; A=B; B=t;}../*
4c40: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
4c50: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
4c60: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
4c70: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
4c80: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
4c90: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
4ca0: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
4cb0: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
4cc0: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
4cd0: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
4ce0: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
4cf0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
4d00: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
4d10: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
4d20: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
4d30: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
4d40: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
4d50: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
4d60: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
4d70: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
4d80: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
4d90: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
4da0: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
4db0: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
4dc0: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
4dd0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
4de0: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
4df0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
4e00: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
4e10: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
4e20: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
4e30: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
4e40: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
4e50: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4e60: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
4e70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4e80: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
4e90: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
4ea0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4eb0: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4ec0: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
4ed0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4ee0: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
4ef0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4f00: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
4f10: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
4f20: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
4f30: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
4f40: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
4f50: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
4f60: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
4f70: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
4f80: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
4f90: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4fa0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4fb0: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
4fc0: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
4fd0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4fe0: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
4ff0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5000: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
5010: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
5020: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
5030: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
5040: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
5050: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5060: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
5070: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5080: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
5090: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
50a0: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
50b0: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
50c0: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
50d0: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
50e0: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
50f0: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
5100: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
5110: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5120: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
5130: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
5140: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
5150: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5160: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
5170: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
5180: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
5190: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
51a0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
51b0: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
51c0: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
51d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
51e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
51f0: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
5200: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
5210: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5220: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
5230: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
5240: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
5250: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5260: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
5270: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
5280: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
5290: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
52a0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
52b0: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
52c0: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
52d0: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
52e0: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
52f0: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
5300: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
5310: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
5320: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
5330: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
5340: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
5350: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
5360: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
5370: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
5380: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
5390: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
53a0: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
53b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
53c0: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
53d0: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
53e0: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
53f0: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
5400: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
5410: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
5420: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
5430: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
5440: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
5450: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
5460: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
5470: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
5480: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
5490: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
54a0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
54b0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
54c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
54d0: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
54e0: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
54f0: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
5500: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
5510: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
5520: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
5530: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
5540: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
5550: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5560: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
5570: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
5580: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
5590: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
55a0: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
55b0: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
55c0: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
55d0: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
55e0: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
55f0: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
5600: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
5610: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
5620: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
5630: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
5640: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
5650: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
5660: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
5670: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
5680: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
5690: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
56a0: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
56b0: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
56c0: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
56d0: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
56e0: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
56f0: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
5700: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74  e LogEst quantit
5710: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
5720: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
5730: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
5740: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
5750: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
5760: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
5770: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
5780: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
5790: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
57a0: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
57b0: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
57c0: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
57d0: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
57e0: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
57f0: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
5800: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
5810: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
5820: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
5830: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
5840: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
5850: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
5860: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
5870: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
5880: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
5890: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
58a0: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
58b0: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
58c0: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
58d0: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
58e0: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
58f0: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
5900: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
5910: 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  es..** Examples:
5920: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e  .**.**    0.5 ->
5930: 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30   -10           0
5940: 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20  .1 -> -33       
5950: 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a   0.0625 -> -40.*
5960: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
5970: 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a  TYPE LogEst;../*
5980: 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49  .** Set the SQLI
5990: 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f  TE_PTRSIZE macro
59a0: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
59b0: 66 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69  f bytes in a poi
59c0: 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  nter.*/.#ifndef 
59d0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23  SQLITE_PTRSIZE.#
59e0: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49   if defined(__SI
59f0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a  ZEOF_POINTER__).
5a00: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5a10: 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45  E_PTRSIZE __SIZE
5a20: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65  OF_POINTER__.# e
5a30: 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36  lif defined(i386
5a40: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5a50: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
5a60: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
5a70: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20   ||    \.       
5a80: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20  defined(_M_ARM) 
5a90: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61    || defined(__a
5aa0: 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69  rm__)    || defi
5ab0: 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64  ned(__x86).#   d
5ac0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
5ad0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
5ae0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
5af0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
5b00: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
5b10: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
5b20: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
5b30: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
5b40: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
5b50: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
5b60: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
5b70: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
5b80: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
5b90: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
5ba0: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
5bb0: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
5bc0: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
5bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
5be0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
5bf0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
5c00: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
5c10: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
5c20: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
5c30: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
5c40: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
5c50: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
5c60: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
5c70: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
5c80: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
5c90: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
5ca0: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
5cb0: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
5cc0: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
5cd0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
5ce0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
5cf0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
5d00: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
5d10: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
5d20: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
5d30: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
5d40: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
5d50: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
5d60: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
5d70: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
5d80: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
5d90: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
5da0: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
5db0: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
5dc0: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
5dd0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
5de0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
5df0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
5e00: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
5e10: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
5e20: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
5e30: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
5e40: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
5e50: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
5e60: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
5e70: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
5e80: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5e90: 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65  YTEORDER=1 is se
5ea0: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
5eb0: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
5ec0: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
5ed0: 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64  .*/.#if (defined
5ee0: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5ef0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5f00: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5f10: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5f20: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36     defined(__x86
5f30: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
5f40: 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64  __x86_64__) || d
5f50: 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20  efined(_M_X64)  
5f60: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5f70: 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c  ined(_M_AMD64) |
5f80: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d  | defined(_M_ARM
5f90: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5fa0: 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20  (__x86)   ||    
5fb0: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5fc0: 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66  _arm__)) && !def
5fd0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5fe0: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
5ff0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6000: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
6010: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6020: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
6030: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6040: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
6050: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
6060: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
6070: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69  TE_UTF16LE.#endi
6080: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 73  f.#if (defined(s
6090: 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69  parc)    || defi
60a0: 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c  ned(__ppc__))  \
60b0: 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65 64  .    && !defined
60c0: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
60d0: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
60e0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
60f0: 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 64  RDER    4321.# d
6100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
6110: 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65  ENDIAN    1.# de
6120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6130: 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66  LEENDIAN 0.# def
6140: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6150: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
6160: 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69  TF16BE.#endif.#i
6170: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6180: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69  E_BYTEORDER).# i
6190: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
61a0: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
61b0: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
61c0: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
61d0: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
61e0: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
61f0: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6200: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6210: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
6220: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
6230: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
6240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
6250: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
6260: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6270: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
6280: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
6290: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
62a0: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
62b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
62c0: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
62d0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
62e0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
62f0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
6300: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
6310: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
6320: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
6330: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
6340: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
6350: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
6360: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
6370: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
6380: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
6390: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
63a0: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
63b0: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
63c0: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
63d0: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
63e0: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
63f0: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
6400: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
6410: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
6420: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
6430: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
6440: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
6450: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
6460: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
6470: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
6480: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
6490: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
64a0: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
64b0: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
64c0: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
64d0: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
64e0: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
64f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
6500: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
6510: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
6520: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
6530: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
6540: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
6550: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
6560: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
6570: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
6580: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
6590: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
65a0: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
65b0: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
65c0: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
65d0: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
65e0: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
65f0: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
6600: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
6610: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
6620: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
6630: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
6640: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
6650: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
6660: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
6670: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
6680: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
6690: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
66a0: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
66b0: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
66c0: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
66d0: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
66e0: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
66f0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
6700: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
6710: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
6720: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
6730: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
6740: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
6750: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
6760: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
6770: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
6780: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
6790: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
67a0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
67b0: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
67c0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
67d0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
67e0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
67f0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
6800: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
6810: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
6820: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
6830: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
6840: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
6850: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
6860: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
6870: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
6880: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6890: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
68a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
68b0: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
68c0: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
68d0: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
68e0: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
68f0: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
6900: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
6910: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
6920: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
6930: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
6940: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
6950: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6960: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
6970: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
6980: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
6990: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
69a0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
69b0: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  E 0.# endif.# de
69c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
69d0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f  MMAP_SIZE_xc 1 /
69e0: 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * exclude from c
69f0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
6a00: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
6a10: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
6a20: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
6a30: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
6a40: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
6a50: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6a60: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
6a70: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
6a80: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
6a90: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
6aa0: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
6ab0: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
6ac0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
6ad0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6ae0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6af0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
6b00: 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  ZE 0.# define SQ
6b10: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
6b20: 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20  P_SIZE_xc 1  /* 
6b30: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
6b40: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  me.c */.#endif.#
6b50: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
6b60: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
6b70: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6b80: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6b90: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6ba0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6bb0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6bc0: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
6bd0: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
6be0: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
6bf0: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
6c00: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
6c10: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
6c20: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
6c30: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
6c40: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
6c50: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
6c60: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
6c70: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
6c80: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6c90: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
6ca0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6cb0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
6cc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
6cd0: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6ce0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6cf0: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6d00: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6d10: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
6d20: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
6d30: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6d40: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
6d50: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6d60: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
6d70: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6d80: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
6d90: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
6da0: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
6db0: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
6dc0: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
6dd0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
6de0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
6df0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
6e00: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
6e10: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
6e20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
6e30: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
6e40: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
6e50: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
6e60: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6e70: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
6e80: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6e90: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
6ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
6eb0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6ec0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6ed0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
6ee0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
6ef0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
6f00: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
6f10: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
6f20: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
6f30: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
6f40: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
6f50: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
6f60: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
6f70: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
6f80: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
6f90: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
6fa0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
6fb0: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
6fc0: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
6fd0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
6fe0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
6ff0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7000: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7010: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7020: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7030: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7040: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7050: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7060: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7070: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7080: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7090: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
70a0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
70b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
70c0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
70d0: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
70e0: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
70f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7100: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7110: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7120: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7130: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7140: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7150: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7160: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7170: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7180: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7190: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
71a0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
71b0: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
71c0: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
71d0: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
71e0: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
71f0: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7200: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7210: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7220: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7230: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7240: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7250: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7260: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7270: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7280: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7290: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
72a0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
72b0: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
72c0: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
72d0: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
72e0: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
72f0: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
7300: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
7310: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
7320: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
7330: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
7340: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
7350: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7360: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7370: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7380: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7390: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
73a0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
73b0: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
73c0: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
73d0: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
73e0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
73f0: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
7400: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
7410: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
7420: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
7430: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
7440: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
7450: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7460: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7470: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7480: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7490: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
74a0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
74b0: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
74c0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
74d0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
74e0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
74f0: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
7500: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
7510: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
7520: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
7530: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
7540: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
7550: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
7560: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
7570: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
7580: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
7590: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
75a0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
75b0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
75c0: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
75d0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
75e0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
75f0: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
7600: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
7610: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
7620: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
7630: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
7640: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
7650: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
7660: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
7670: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
7680: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
7690: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
76a0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
76b0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
76c0: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
76d0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
76e0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
76f0: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
7700: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
7710: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
7720: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
7730: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
7740: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
7750: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
7760: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
7770: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
7780: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
7790: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
77a0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
77b0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
77c0: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
77d0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
77e0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
77f0: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
7800: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
7810: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
7820: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
7830: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
7840: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
7850: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
7860: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
7870: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
7880: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
7890: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
78a0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
78b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
78c0: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
78d0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
78e0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
78f0: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
7900: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
7910: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
7920: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
7930: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
7940: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
7950: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
7960: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
7970: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
7980: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
7990: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
79a0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
79b0: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
79c0: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
79d0: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
79e0: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
79f0: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
7a00: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
7a10: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
7a20: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
7a30: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
7a40: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
7a50: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
7a60: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
7a70: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
7a80: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
7a90: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
7aa0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7ab0: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
7ac0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
7ad0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
7ae0: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
7af0: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
7b00: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
7b10: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
7b20: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
7b30: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
7b40: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
7b50: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
7b60: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
7b70: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
7b80: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
7b90: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
7ba0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
7bb0: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
7bc0: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
7bd0: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
7be0: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
7bf0: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
7c00: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
7c10: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
7c20: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
7c30: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
7c40: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
7c50: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
7c60: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
7c70: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
7c80: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
7c90: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
7ca0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
7cb0: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
7cc0: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
7cd0: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
7ce0: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
7cf0: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
7d00: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7d10: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
7d20: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
7d30: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
7d40: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
7d50: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
7d60: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
7d70: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
7d80: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
7d90: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
7da0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
7db0: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
7dc0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
7dd0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
7de0: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
7df0: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
7e00: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
7e10: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
7e20: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7e30: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
7e40: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
7e50: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
7e60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
7e70: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
7e80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
7e90: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
7ea0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7eb0: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
7ec0: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
7ed0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
7ee0: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
7ef0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
7f00: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
7f10: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
7f20: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
7f30: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
7f40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7f50: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
7f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
7f70: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
7f80: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
7f90: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
7fa0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
7fb0: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
7fc0: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
7fd0: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
7fe0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
7ff0: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
8000: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
8010: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
8020: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
8030: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8040: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
8050: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
8060: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
8070: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
8080: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
8090: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
80a0: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
80b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
80c0: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
80d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80e0: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
80f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8100: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
8110: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
8120: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8130: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
8140: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8150: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
8160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
8170: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
8180: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8190: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
81a0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
81b0: 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55  t PreUpdate PreU
81c0: 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73  pdate;.typedef s
81d0: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
81e0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
81f0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
8200: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
8210: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
8220: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
8230: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
8240: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
8250: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
8260: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
8270: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
8280: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8290: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
82a0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
82b0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
82c0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
82d0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
82e0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
82f0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
8300: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
8310: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
8320: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
8330: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
8340: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
8350: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
8360: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
8370: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
8380: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
8390: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
83a0: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
83b0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
83c0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
83d0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
83e0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
83f0: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
8400: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
8410: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
8420: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8430: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
8440: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8450: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
8460: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
8470: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
8480: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8490: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
84a0: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
84b0: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
84c0: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
84d0: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a  r the "u8" and.*
84e0: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
84f0: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
8500: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
8510: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
8520: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
8530: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
8540: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
8550: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
8560: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
8570: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
8580: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
8590: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
85a0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
85b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
85c0: 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49  .h"../* The SQLI
85d0: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
85e0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
85f0: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74  tion used to set
8600: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20   the default.** 
8610: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74  synchronous sett
8620: 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49  ing to EXTRA.  I
8630: 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73  t is no longer s
8640: 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66  upported..*/.#if
8650: 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41  def SQLITE_EXTRA
8660: 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69  _DURABLE.# warni
8670: 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45  ng Use SQLITE_DE
8680: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
8690: 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53  S=3 instead of S
86a0: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
86b0: 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  BLE.# define SQL
86c0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
86d0: 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66  HRONOUS 3.#endif
86e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
86f0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65  synchronous leve
8700: 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ls..**.** Note t
8710: 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63  hat (for historc
8720: 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20  al reasons) the 
8730: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
8740: 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65  S_* macros diffe
8750: 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51  r.** from the SQ
8760: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8770: 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62  CHRONOUS value b
8780: 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  y 1..**.**      
8790: 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48       PAGER_SYNCH
87a0: 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46  RONOUS       DEF
87b0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
87c0: 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20  .**   OFF       
87d0: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a                0.
87f0: 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20  **   NORMAL     
8800: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
8810: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a               1.*
8820: 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20  *   FULL        
8830: 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20    3             
8840: 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a              2.**
8850: 20 20 20 45 58 54 52 41 20 20 20 20 20 20 20 20     EXTRA        
8860: 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20   4              
8870: 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a             3.**.
8880: 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41 20 73  ** The "PRAGMA s
8890: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74  ynchronous" stat
88a0: 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20  ement also uses 
88b0: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
88c0: 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74  umbers..** In ot
88d0: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a  her words, the z
88e0: 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72  ero-based number
88f0: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
8900: 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65  ll external inte
8910: 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68  rfaces.** and th
8920: 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75  e one-based valu
8930: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 74 65  es are used inte
8940: 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64  rnally..*/.#ifnd
8950: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
8960: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  T_SYNCHRONOUS.# 
8970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
8980: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
8990: 53 20 28 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  S (PAGER_SYNCHRO
89a0: 4e 4f 55 53 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e  NOUS_FULL-1).#en
89b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
89c0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53  TE_DEFAULT_WAL_S
89d0: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
89e0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
89f0: 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f  LT_WAL_SYNCHRONO
8a00: 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  US SQLITE_DEFAUL
8a10: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65  T_SYNCHRONOUS.#e
8a20: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
8a30: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
8a40: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
8a50: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
8a60: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
8a70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
8a80: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
8a90: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
8aa0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
8ab0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
8ac0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
8ad0: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
8ae0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
8af0: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
8b00: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
8b10: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
8b20: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
8b30: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
8b40: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
8b50: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
8b60: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
8b70: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
8b80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
8b90: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
8ba0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
8bb0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
8bc0: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
8bd0: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
8be0: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
8bf0: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
8c00: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
8c10: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
8c20: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
8c30: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
8c40: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
8c50: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
8c60: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
8c70: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
8c80: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
8c90: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
8ca0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
8cb0: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
8cc0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
8cd0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
8ce0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8cf0: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
8d00: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
8d10: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
8d20: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
8d30: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
8d40: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
8d50: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
8d60: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
8d70: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
8d80: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
8d90: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
8da0: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
8db0: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
8dc0: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
8dd0: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
8de0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
8df0: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
8e00: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
8e10: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
8e20: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
8e30: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
8e40: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
8e50: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
8e60: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
8e70: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
8e80: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
8e90: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
8ea0: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
8eb0: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
8ec0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
8ed0: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
8ee0: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
8ef0: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
8f00: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
8f10: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
8f20: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
8f30: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
8f40: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
8f50: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
8f60: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
8f70: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
8f80: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
8f90: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
8fa0: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
8fb0: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
8fc0: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
8fd0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
8fe0: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
8ff0: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
9000: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
9010: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
9020: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
9030: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
9040: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
9050: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
9060: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
9070: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
9080: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
9090: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
90a0: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
90b0: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
90c0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
90d0: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
90e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
90f0: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
9100: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9110: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
9120: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9130: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
9140: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9150: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
9160: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
9170: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
9180: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
9190: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
91a0: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
91b0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
91c0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
91d0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
91e0: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
91f0: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
9200: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
9210: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
9220: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
9230: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
9240: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
9250: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
9260: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
9270: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
9280: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
9290: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
92a0: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
92b0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
92c0: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
92d0: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
92e0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
92f0: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
9300: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
9310: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
9320: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
9330: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
9340: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
9350: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
9360: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
9370: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
9380: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
9390: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
93a0: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
93b0: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
93c0: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
93d0: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
93e0: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
93f0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9400: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
9410: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
9420: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
9430: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
9440: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
9450: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9460: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
9470: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
9480: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
9490: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
94a0: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
94b0: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
94c0: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
94d0: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
94e0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
94f0: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
9500: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
9510: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
9520: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
9530: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
9540: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
9550: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
9560: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
9570: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
9580: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
9590: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
95a0: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
95b0: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
95c0: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
95d0: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
95e0: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
95f0: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
9600: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
9610: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
9620: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
9630: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
9640: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
9650: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
9660: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
9670: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
9680: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
9690: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
96a0: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
96b0: 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a  0 bytes) */../*.
96c0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
96d0: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
96e0: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
96f0: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
9700: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
9710: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
9720: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
9730: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
9740: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57   (SQLITE_LIMIT_W
9750: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29  ORKER_THREADS+1)
9760: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
9770: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
9780: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
9790: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
97a0: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
97b0: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
97c0: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
97d0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
97e0: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
97f0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9800: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
9810: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9820: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
9830: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
9840: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
9850: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
9860: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
9870: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
9880: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
9890: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
98a0: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
98b0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
98c0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
98d0: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
98e0: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
98f0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
9900: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
9910: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
9920: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
9930: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
9940: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
9950: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
9960: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
9970: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
9980: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
9990: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
99a0: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
99b0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
99c0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
99d0: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
99e0: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
99f0: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
9a00: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
9a10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
9a20: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
9a30: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
9a40: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
9a50: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
9a60: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
9a70: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
9a80: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
9a90: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
9aa0: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
9ab0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
9ac0: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
9ad0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
9ae0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9af0: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
9b00: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
9b10: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
9b20: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
9b30: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
9b40: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
9b50: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
9b60: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
9b70: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
9b80: 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20   u32 bDisable;  
9b90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79           /* Only
9ba0: 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f   operate the loo
9bb0: 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f  kaside when zero
9bc0: 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20   */.  u16 sz;   
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9be0: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
9bf0: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
9c00: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
9c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
9c20: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
9c30: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
9c40: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
9c50: 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20   int nOut;      
9c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9c70: 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75  er of buffers cu
9c80: 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
9c90: 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f  out */.  int mxO
9ca0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
9cb0: 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61   /* Highwater ma
9cc0: 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20  rk for nOut */. 
9cd0: 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20   int anStat[3]; 
9ce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68           /* 0: h
9cf0: 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69  its.  1: size mi
9d00: 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d  sses.  2: full m
9d10: 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61  isses */.  Looka
9d20: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
9d30: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
9d40: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
9d50: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
9d60: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
9d70: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
9d80: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
9d90: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
9da0: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
9db0: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
9dc0: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
9dd0: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
9de0: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
9df0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
9e00: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
9e10: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
9e20: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
9e30: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
9e40: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
9e50: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69  sh table for bui
9e60: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64  lt-in function d
9e70: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70  efinitions.  (Ap
9e80: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
9e90: 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75  d.** functions u
9ea0: 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62  se a regular tab
9eb0: 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61  le table from ha
9ec0: 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73  sh.h.).**.** Has
9ed0: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
9ee0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
9ef0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
9f00: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
9f10: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
9f20: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
9f30: 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  .u.pHash chain..
9f40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9f50: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32  E_FUNC_HASH_SZ 2
9f60: 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  3.struct FuncDef
9f70: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
9f80: 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f   *a[SQLITE_FUNC_
9f90: 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20  HASH_SZ];       
9fa0: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
9fb0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
9fc0: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
9fd0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
9fe0: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
9ff0: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
a000: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
a010: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
a020: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
a030: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
a040: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
a050: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
a060: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
a070: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
a080: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
a090: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
a0a0: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
a0b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a0c0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
a0d0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
a0e0: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
a0f0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
a100: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
a110: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
a120: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
a130: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
a140: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
a150: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
a160: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
a170: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
a180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
a190: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
a1a0: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
a1b0: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
a1c0: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
a1d0: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
a1e0: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
a1f0: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
a200: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
a210: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
a220: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
a230: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
a240: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
a250: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
a260: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
a270: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
a280: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
a290: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
a2a0: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
a2b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
a2c0: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
a2d0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
a2e0: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
a2f0: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
a300: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
a310: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
a320: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
a330: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
a340: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
a350: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
a360: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
a370: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
a380: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
a390: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
a3a0: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
a3b0: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
a3c0: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
a3d0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
a3e0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
a3f0: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
a400: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
a410: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
a420: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
a430: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
a440: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
a450: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
a460: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
a470: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
a480: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
a490: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
a4a0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
a4b0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a4c0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
a4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4e0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
a4f0: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
a500: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
a510: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
a520: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
a530: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
a540: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
a550: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
a560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a570: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
a580: 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  );.#endif.../*.*
a590: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
a5a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
a5b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
a5c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
a5d0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
a5e0: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
a5f0: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
a600: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
a610: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
a620: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
a630: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a640: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
a650: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
a660: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
a670: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
a680: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
a690: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
a6a0: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
a6b0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
a6c0: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
a6d0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
a6e0: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
a6f0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
a700: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
a710: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
a720: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
a730: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a740: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
a750: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
a760: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  e */.  int flags
a770: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a780: 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61       /* Miscella
a790: 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65  neous flags. See
a7a0: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
a7b0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
a7c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
a7d0: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
a7e0: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
a7f0: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
a800: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
a810: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
a820: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
a830: 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ting */.  unsign
a840: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
a850: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
a860: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
a870: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
a880: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
a890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8a0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
a8b0: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
a8c0: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
a8d0: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
a8e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
a8f0: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
a900: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
a910: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  urning */.  int 
a920: 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20  iSysErrno;      
a930: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
a940: 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61  no value from la
a950: 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20  st system error 
a960: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
a970: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
a980: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
a990: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
a9a0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
a9b0: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a9d0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
a9e0: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d  */.  u8 autoComm
a9f0: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
aa00: 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63     /* The auto-c
aa10: 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20  ommit flag. */. 
aa20: 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20   u8 temp_store; 
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aa40: 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d  * 1: file 2: mem
aa50: 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a  ory 0: default *
aa60: 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69  /.  u8 mallocFai
aa70: 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  led;            
aa80: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20    /* True if we 
aa90: 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c  have seen a mall
aaa0: 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20  oc failure */.  
aab0: 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  u8 bBenignMalloc
aac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
aad0: 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20   Do not require 
aae0: 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  OOMs if true */.
aaf0: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
ab00: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
ab10: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
ab20: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
ab30: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
ab40: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
ab50: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
ab60: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
ab70: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
ab80: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
ab90: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
aba0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
abb0: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
abc0: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
abd0: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
abe0: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
abf0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
ac00: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
ac10: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
ac20: 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69    u8 isTransacti
ac30: 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  onSavepoint;    
ac40: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f  /* True if the o
ac50: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
ac60: 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20  nt is a TS */.  
ac70: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
ac80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ac90: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
aca0: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
acb0: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acd0: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
ace0: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
acf0: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
ad00: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ad20: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
ad30: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
ad40: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
ad50: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
ad60: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
ad70: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
ad80: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
ad90: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
ada0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
adb0: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
adc0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
add0: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
ade0: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
adf0: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
ae00: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
ae10: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
ae20: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
ae30: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
ae40: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
ae50: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
ae60: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae80: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
ae90: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
aea0: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
aeb0: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
aec0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
aed0: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
aee0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
aef0: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
af20: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
af30: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
af40: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
af50: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
af60: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
af70: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
af80: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70  er */.    u8 imp
af90: 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20  osterTable;     
afa0: 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e        /* Buildin
afb0: 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61  g an imposter ta
afc0: 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ble */.  } init;
afd0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
afe0: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
aff0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
b000: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
b010: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
b020: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
b030: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b040: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
b050: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
b060: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
b070: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
b080: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b090: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
b0a0: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
b0b0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
b0c0: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
b0d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b0e0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
b0f0: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
b100: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
b110: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
b120: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b130: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
b140: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
b150: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
b160: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
b170: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b180: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
b190: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
b1a0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
b1b0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
b1c0: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
b1d0: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69  handles */.  voi
b1e0: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
b1f0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  *,const char*); 
b200: 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20         /* Trace 
b210: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
b220: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b240: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
b250: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
b260: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
b270: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
b280: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
b290: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
b2a0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
b2b0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
b2c0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b2e0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
b2f0: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
b300: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
b310: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
b320: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
b330: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
b340: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
b350: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
b360: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
b370: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
b380: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
b390: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
b3a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b3b0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
b3c0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
b3d0: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
b3e0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
b3f0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
b400: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
b410: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
b420: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
b430: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
b440: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
b450: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
b460: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
b470: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
b480: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
b490: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
b4a0: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
b4b0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
b4c0: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
b4d0: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
b4e0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
b4f0: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
b500: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
b510: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
b520: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
b530: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
b540: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
b550: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
b560: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
b570: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
b580: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
b590: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
b5a0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
b5b0: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
b5c0: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
b5d0: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
b5e0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
b5f0: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
b600: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b610: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
b620: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
b630: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
b640: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
b650: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
b660: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
b670: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
b680: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
b690: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
b6a0: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
b6b0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
b6c0: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
b6d0: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
b6e0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
b6f0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
b700: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
b710: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
b720: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
b730: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
b740: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
b750: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
b760: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
b770: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
b780: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
b790: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
b7a0: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
b7b0: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
b7c0: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
b7d0: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
b7e0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
b7f0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
b800: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
b810: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
b820: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
b830: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
b840: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
b850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
b860: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
b870: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
b880: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b8a0: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
b8b0: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
b8c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
b8d0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
b8e0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
b8f0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
b900: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
b910: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
b920: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
b930: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
b940: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
b950: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
b960: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
b970: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
b980: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
b990: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
b9a0: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
b9b0: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
b9c0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
b9d0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
b9e0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
b9f0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
ba00: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
ba10: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
ba20: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
ba30: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
ba40: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
ba50: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
ba60: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
ba70: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ba80: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
ba90: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
baa0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
bab0: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
bac0: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
bad0: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
baf0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
bb00: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
bb10: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
bb20: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
bb30: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
bb40: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
bb50: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
bb60: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68  */.#endif.  Hash
bb70: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
bb80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
bb90: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
bba0: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
bbb0: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
bbc0: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
bbd0: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
bbe0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
bbf0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
bc00: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
bc10: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
bc20: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
bc30: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
bc40: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
bc50: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
bc60: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
bc70: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
bc80: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
bc90: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
bca0: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
bcb0: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
bcc0: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
bcd0: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
bce0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
bcf0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
bd00: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
bd10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
bd20: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
bd30: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
bd40: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
bd50: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
bd60: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
bd70: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
bd80: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
bd90: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
bda0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
bdb0: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
bdc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
bdd0: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
bde0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
bdf0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
be00: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
be10: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
be20: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
be30: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
be40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
be50: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
be60: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
be70: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
be80: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
be90: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
bea0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
beb0: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
bec0: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
bed0: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a  e STATIC_MASTER.
bee0: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
bef0: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
bf00: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
bf10: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
bf20: 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  y.c..  **.  ** W
bf30: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
bf40: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
bf50: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
bf60: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
bf70: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
bf80: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
bf90: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
bfa0: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
bfb0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
bfc0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
bfd0: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
bfe0: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
bff0: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
c000: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
c010: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
c020: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
c030: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
c040: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
c050: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
c060: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
c070: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
c080: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
c090: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
c0a0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
c0b0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
c0c0: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
c0d0: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
c0e0: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c100: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c110: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
c120: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
c130: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
c140: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
c150: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
c160: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
c170: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
c180: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
c190: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
c1a0: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
c1b0: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
c1c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
c1d0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
c1e0: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
c1f0: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
c200: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
c210: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
c220: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
c230: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
c240: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
c250: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
c260: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
c270: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
c280: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
c290: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
c2a0: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
c2b0: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
c2c0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
c2d0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
c2e0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
c2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c300: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
c310: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
c320: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
c330: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
c340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
c350: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
c360: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
c370: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
c380: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
c390: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
c3a0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
c3b0: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
c3c0: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
c3d0: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
c3e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
c3f0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
c400: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
c410: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
c420: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
c430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
c440: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
c450: 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75  00010  /* Use fu
c460: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
c470: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
c480: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
c490: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
c4a0: 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  020  /* OK to sp
c4b0: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
c4c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c4d0: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
c4e0: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
c4f0: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
c500: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
c510: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
c520: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
c530: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
c540: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
c550: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c580: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
c590: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
c5a0: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5d0: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
c5e0: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
c5f0: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
c600: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
c610: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
c620: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
c630: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
c640: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c670: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
c680: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
c690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
c6a0: 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30  race       0x000
c6b0: 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00200  /* Debug 
c6c0: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
c6d0: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
c6e0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
c6f0: 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30  isting    0x0000
c700: 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c  0400  /* Debug l
c710: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
c720: 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66  programs */.#def
c730: 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65  ine SQLITE_Write
c740: 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30  Schema    0x0000
c750: 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75  0800  /* OK to u
c760: 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53  pdate SQLITE_MAS
c770: 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TER */.#define S
c780: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
c790: 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20  race 0x00001000 
c7a0: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
c7b0: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
c7c0: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
c7d0: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
c7e0: 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20  s   0x00002000  
c7f0: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
c800: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
c810: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
c820: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
c830: 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20  itted 0x0004000 
c840: 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63   /* For shared-c
c850: 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65  ache mode */.#de
c860: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
c870: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
c880: 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65  08000  /* Create
c890: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
c8a0: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
c8b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
c8c0: 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30  overyMode   0x00
c8d0: 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72  010000  /* Ignor
c8e0: 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20  e schema errors 
c8f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c900: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
c910: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
c920: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
c930: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
c940: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
c950: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
c960: 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  40000  /* Enable
c970: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
c980: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
c990: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
c9a0: 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20  s    0x00080000 
c9b0: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
c9c0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
c9d0: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
c9e0: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
c9f0: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
ca00: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
ca10: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
ca20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ca30: 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30  PreferBuiltin  0
ca40: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72  x00200000  /* Pr
ca50: 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c  eference to buil
ca60: 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64  t-in funcs */.#d
ca70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
ca80: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
ca90: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
caa0: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
cab0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cac0: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
cad0: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
cae0: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
caf0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
cb00: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
cb10: 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30 30  FKs       0x0100
cb20: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
cb30: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
cb40: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
cb50: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
cb60: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
cb70: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
cb80: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
cb90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
cba0: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 34  eEQP        0x04
cbb0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
cbc0: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
cbd0: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
cbe0: 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20  QLITE_Vacuum    
cbf0: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
cc00: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
cc10: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65   a VACUUM */.#de
cc20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
cc30: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31 30 30  SizeCk     0x100
cc40: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
cc50: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
cc60: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
cc70: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
cc80: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 32 30 30 30  okenizer  0x2000
cc90: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
cca0: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
ccb0: 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  ) */.../*.** Bit
ccc0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
ccd0: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
cce0: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
ccf0: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
cd00: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
cd10: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
cd20: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
cd30: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
cd40: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
cd50: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
cd60: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
cd70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
cd80: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
cd90: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
cda0: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
cdb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
cdc0: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
cdd0: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
cde0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
cdf0: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
ce00: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
ce10: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
ce20: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
ce30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
ce40: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
ce50: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
ce60: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce80: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
ce90: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
cea0: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
ceb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cec0: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
ced0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
cee0: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
cef0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
cf00: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
cf10: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
cf20: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
cf30: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
cf40: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
cf50: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
cf60: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
cf70: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
cf80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cf90: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
cfa0: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
cfb0: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
cfc0: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
cfd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cfe0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
cff0: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
d000: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
d010: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
d020: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
d030: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
d040: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
d050: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
d060: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
d070: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
d080: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
d090: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
d0a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d0b0: 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20  TE_CursorHints  
d0c0: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64    0x2000   /* Ad
d0d0: 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20  d OP_CursorHint 
d0e0: 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69  opcodes */.#defi
d0f0: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
d100: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
d110: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
d120: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
d130: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
d140: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
d150: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
d160: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
d170: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
d180: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d190: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
d1a0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
d1b0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
d1c0: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
d1d0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
d1e0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
d1f0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
d200: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
d210: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
d220: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
d230: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
d240: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
d250: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
d260: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
d270: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
d280: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
d290: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
d2a0: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
d2b0: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
d2c0: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
d2d0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
d2e0: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
d2f0: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
d300: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
d310: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
d320: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
d330: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
d340: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
d350: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
d360: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
d370: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
d380: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
d390: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
d3a0: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
d3b0: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
d3c0: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
d3d0: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
d3e0: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
d3f0: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
d400: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
d410: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
d420: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
d430: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
d440: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
d450: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
d460: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
d470: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
d480: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
d490: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
d4a0: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
d4b0: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
d4c0: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
d4d0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
d4e0: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
d4f0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
d500: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
d510: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
d520: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
d530: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
d540: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
d550: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
d560: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
d570: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
d580: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
d590: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
d5a0: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
d5b0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
d5c0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
d5d0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
d5e0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
d5f0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
d600: 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75  .  For global bu
d610: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
d620: 20 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20   (ex: substr(), 
d630: 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a  max(), count()).
d640: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
d650: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
d660: 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71  s held in the sq
d670: 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
d680: 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a  tions object..**
d690: 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74   For per-connect
d6a0: 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d  ion application-
d6b0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
d6c0: 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  s, a pointer to 
d6d0: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
d6e0: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  e is held in the
d6f0: 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20   db->aHash hash 
d700: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  table..**.** The
d710: 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69   u.pHash field i
d720: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c  s used by the gl
d730: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20  obal built-ins. 
d740: 20 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74   The u.pDestruct
d750: 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75  or.** field is u
d760: 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65  sed by per-conne
d770: 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75  ction app-def fu
d780: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75  nctions..*/.stru
d790: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
d7a0: 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  8 nArg;         
d7b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d7c0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
d7d0: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
d7e0: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
d7f0: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
d800: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
d810: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
d820: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
d830: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
d840: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
d850: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
d860: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
d870: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
d880: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
d890: 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71  oid (*xSFunc)(sq
d8a0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
d8b0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
d8c0: 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20  **); /* func or 
d8d0: 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f  agg-step */.  vo
d8e0: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
d8f0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
d900: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
d910: 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c      /* Agg final
d920: 69 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  izer */.  const 
d930: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f  char *zName;   /
d940: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
d950: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
d960: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e   union {.    Fun
d970: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
d980: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
d990: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
d9a0: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
d9b0: 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73  h */.    FuncDes
d9c0: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
d9d0: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
d9e0: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
d9f0: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
da00: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
da10: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
da20: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
da30: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
da40: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
da50: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
da60: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
da70: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
da80: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
da90: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
daa0: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
dab0: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
dac0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
dad0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
dae0: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
daf0: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
db00: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
db10: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
db20: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
db30: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
db40: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
db50: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
db60: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
db70: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
db80: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
db90: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
dba0: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
dbb0: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
dbc0: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
dbd0: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
dbe0: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
dbf0: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
dc00: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
dc10: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
dc20: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
dc30: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
dc40: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
dc50: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
dc60: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
dc70: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
dc80: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
dc90: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
dca0: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
dcb0: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
dcc0: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
dcd0: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
dce0: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
dcf0: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
dd00: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
dd10: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
dd20: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
dd30: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
dd40: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
dd50: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
dd60: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
dd70: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
dd80: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
dd90: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
dda0: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
ddb0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
ddc0: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
ddd0: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
dde0: 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c  ARG.  And.** SQL
ddf0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
de00: 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
de10: 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54  me as SQLITE_DET
de20: 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65  ERMINISTIC.  The
de30: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
de40: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
de50: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
de60: 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65  ify this..*/.#de
de70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
de80: 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33  _ENCMASK  0x0003
de90: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
dea0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
deb0: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
dec0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ded0: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30  C_LIKE     0x000
dee0: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
def0: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
df00: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
df10: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
df20: 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20  CASE     0x0008 
df30: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
df40: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
df50: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
df60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
df70: 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45  M    0x0010 /* E
df80: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
df90: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
dfa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
dfb0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30  NC_NEEDCOLL 0x00
dfc0: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
dfd0: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
dfe0: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a  ght be called*/.
dff0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e000: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
e010: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
e020: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
e030: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
e040: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
e050: 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c    0x0080 /* Buil
e060: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
e070: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
e080: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
e090: 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  UNT    0x0100 /*
e0a0: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
e0b0: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
e0c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e0d0: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30  UNC_COALESCE 0x0
e0e0: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
e0f0: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
e100: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
e110: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
e120: 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a  LIKELY 0x0400 /*
e130: 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65   Built-in unlike
e140: 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ly() function */
e150: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e160: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78  FUNC_CONSTANT 0x
e170: 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  0800 /* Constant
e180: 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63   inputs give a c
e190: 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a  onstant output *
e1a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e1b0: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30  _FUNC_MINMAX   0
e1c0: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
e1d0: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
e1e0: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
e1f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e200: 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32  UNC_SLOCHNG  0x2
e210: 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61  000 /* "Slow Cha
e220: 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73  nge". Value cons
e230: 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20  tant during a.  
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72    ** single quer
e270: 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65  y - might change
e280: 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f   over time */../
e290: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
e2a0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
e2b0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
e2c0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
e2d0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
e2e0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
e2f0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
e300: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
e310: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
e320: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
e330: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
e340: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
e350: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
e360: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
e370: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
e380: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
e390: 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
e3a0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
e3b0: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
e3c0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
e3d0: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
e3e0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
e3f0: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
e400: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
e410: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
e420: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
e430: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
e440: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
e450: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
e460: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
e470: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
e480: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
e490: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
e4a0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
e4b0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
e4c0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
e4d0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
e4e0: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
e4f0: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
e500: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
e510: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
e520: 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
e530: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
e540: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
e550: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
e560: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
e570: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
e580: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
e590: 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
e5a0: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
e5b0: 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
e5c0: 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
e5d0: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
e5e0: 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
e5f0: 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
e600: 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
e610: 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
e620: 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
e630: 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
e640: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
e650: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
e660: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
e670: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
e680: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
e690: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
e6a0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
e6b0: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
e6c0: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
e6d0: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
e6e0: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
e6f0: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
e700: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
e710: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
e720: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
e730: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
e740: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
e750: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
e760: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
e770: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
e780: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
e790: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
e7a0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
e7b0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
e7c0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
e7d0: 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
e7e0: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
e7f0: 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
e800: 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
e810: 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
e820: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
e830: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
e840: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
e850: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
e860: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
e870: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
e880: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
e890: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
e8a0: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
e8b0: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
e8c0: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
e8d0: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
e8e0: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
e8f0: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
e900: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
e910: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
e920: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
e930: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
e940: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
e950: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
e960: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
e970: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
e980: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
e990: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
e9a0: 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
e9b0: 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
e9c0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
e9d0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
e9e0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
e9f0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
ea00: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
ea10: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
ea20: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
ea30: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
ea40: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
ea50: 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
ea60: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
ea70: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ea80: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
ea90: 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
eaa0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
eab0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
eac0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ead0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
eae0: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
eaf0: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
eb00: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
eb10: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
eb20: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
eb30: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
eb40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
eb50: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
eb60: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
eb70: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
eb80: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
eb90: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
eba0: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
ebb0: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
ebc0: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
ebd0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ebe0: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
ebf0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
ec00: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
ec10: 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
ec20: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
ec30: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
ec40: 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
ec50: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65  0, #zName, }.#de
ec60: 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  fine LIKEFUNC(zN
ec70: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
ec80: 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  flags) \.  {nArg
ec90: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
eca0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
ecb0: 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28  F8|flags, \.   (
ecc0: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
ecd0: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  ikeFunc, 0, #zNa
ece0: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
ecf0: 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d  e AGGREGATE(zNam
ed00: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
ed10: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
ed20: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ed30: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
ed40: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ed50: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
ed60: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
ed70: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
ed80: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65  #zName, {0}}.#de
ed90: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
eda0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
edb0: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
edc0: 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
edd0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ede0: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
edf0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ee00: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
ee10: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
ee20: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
ee30: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
ee40: 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41  e, {0}}../*.** A
ee50: 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70  ll current savep
ee60: 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64  oints are stored
ee70: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
ee80: 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a  t starting at.**
ee90: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
eea0: 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65  int. The first e
eeb0: 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69  lement in the li
eec0: 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72  st is the most r
eed0: 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65  ecently.** opene
eee0: 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76  d savepoint. Sav
eef0: 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65  epoints are adde
ef00: 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79  d to the list by
ef10: 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f   the vdbe.** OP_
ef20: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
ef30: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
ef40: 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63   Savepoint {.  c
ef50: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef70: 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20     /* Savepoint 
ef80: 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e  name (nul-termin
ef90: 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e  ated) */.  i64 n
efa0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
efc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
efd0: 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f  rred fk violatio
efe0: 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  ns */.  i64 nDef
eff0: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20  erredImmCons;   
f000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f010: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
f020: 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53  d imm fk. */.  S
f030: 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b  avepoint *pNext;
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76     /* Parent sav
f060: 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20  epoint (if any) 
f070: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
f080: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75   following are u
f090: 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
f0a0: 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
f0b0: 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
f0c0: 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65  ),.** and as the
f0d0: 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
f0e0: 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  the OP_Savepoint
f0f0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
f100: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
f110: 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a  NT_BEGIN      0.
f120: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
f130: 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23  T_RELEASE    1.#
f140: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
f150: 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a  _ROLLBACK   2...
f160: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74  /*.** Each SQLit
f170: 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61  e module (virtua
f180: 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  l table definiti
f190: 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62  on) is defined b
f1a0: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
f1b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
f1c0: 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f  g structure, sto
f1d0: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
f1e0: 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61  e3.aModule.** ha
f1f0: 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72  sh table..*/.str
f200: 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63  uct Module {.  c
f210: 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
f220: 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20  ule *pModule;   
f230: 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
f240: 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f  pointers */.  co
f250: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f270: 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65     /* Name passe
f280: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
f290: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  le() */.  void *
f2a0: 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f2c0: 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
f2d0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
f2e0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
f2f0: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
f300: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
f310: 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
f320: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61  function */.  Ta
f330: 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20  ble *pEpoTab;   
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f350: 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20     /* Eponymous 
f360: 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d  table for this m
f370: 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  odule */.};../*.
f380: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
f390: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
f3a0: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
f3b0: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
f3c0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
f3d0: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
f3e0: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
f3f0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
f400: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
f410: 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30  his column, \000
f420: 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20  , then the type 
f430: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
f440: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
f450: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
f460: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
f470: 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
f480: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
f490: 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
f4a0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
f4b0: 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
f4c0: 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
f4d0: 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
f4e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
f4f0: 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
f500: 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
f510: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
f520: 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
f530: 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
f540: 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
f550: 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20  d size of value 
f560: 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  in this column. 
f570: 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a  sizeof(INT)==1 *
f580: 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
f590: 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
f5a0: 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
f5b0: 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
f5c0: 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
f5d0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
f5e0: 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
f5f0: 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
f600: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
f610: 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
f620: 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
f630: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
f640: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
f650: 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
f660: 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
f670: 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
f680: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
f690: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
f6a0: 48 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20  HASTYPE  0x0004 
f6b0: 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20     /* Type name 
f6c0: 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e  follows column n
f6d0: 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ame */../*.** A 
f6e0: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
f6f0: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
f700: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
f710: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
f720: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
f730: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
f740: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f750: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
f760: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
f770: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
f780: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
f790: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
f7a0: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
f7b0: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
f7c0: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
f7d0: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
f7e0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
f7f0: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
f800: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
f810: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
f820: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
f830: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
f840: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
f850: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
f860: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
f870: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
f880: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
f890: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
f8a0: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
f8b0: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
f8c0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
f8d0: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
f8e0: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
f8f0: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
f900: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
f910: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
f920: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
f930: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
f940: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
f950: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
f960: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
f970: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
f980: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
f990: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
f9a0: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
f9b0: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
f9c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
f9d0: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
f9e0: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
f9f0: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
fa00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fa10: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
fa20: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
fa30: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
fa40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
fa50: 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a  _UNDEFINED -1 /*
fa60: 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73   No sort order s
fa70: 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a  pecified */../*.
fa80: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
fa90: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
faa0: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
fab0: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
fac0: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
fad0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
fae0: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
faf0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
fb00: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
fb10: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
fb20: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
fb30: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
fb40: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
fb50: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
fb60: 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20  cutively..**.** 
fb70: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
fb80: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
fb90: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
fba0: 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'A'.  That way,
fbb0: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
fbc0: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
fbd0: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
fbe0: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
fbf0: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
fc00: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
fc10: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
fc20: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
fc30: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
fc40: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
fc50: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
fc60: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
fc70: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
fc80: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
fc90: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
fca0: 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c  son.  And the BL
fcb0: 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74  OB type is first
fcc0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
fcd0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20  ITE_AFF_BLOB    
fce0: 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'A'.#define SQL
fcf0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
fd00: 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'B'.#define SQL
fd10: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
fd20: 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'C'.#define SQL
fd30: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
fd40: 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'D'.#define SQL
fd50: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
fd60: 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'E'..#define sq
fd70: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
fd80: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
fd90: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
fda0: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
fdb0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
fdc0: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
fdd0: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
fde0: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
fdf0: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a  ffinity value..*
fe00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fe10: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
fe20: 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  47../*.** Additi
fe30: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
fe40: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
fe50: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
fe60: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
fe70: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
fe80: 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
fe90: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
fea0: 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
feb0: 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
fec0: 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
fed0: 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
fee0: 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
fef0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
ff00: 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
ff10: 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
ff20: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
ff30: 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
ff40: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
ff50: 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
ff60: 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
ff70: 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
ff80: 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
ff90: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ffa0: 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d  L   0x10  /* jum
ffb0: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
ffc0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
ffd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ffe0: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30  TOREP2      0x20
fff0: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
10000 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
10010 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
10020 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10030 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
10040 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
10050 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10060 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
10070 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x90  /* Assert t
10080 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
10090 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
100a0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
100b0 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
100c0 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
100d0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
100e0 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
100f0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
10100 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64  ..**.** If the d
10110 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
10120 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
10130 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
10140 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
10150 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
10160 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
10170 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
10180 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
10190 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
101a0 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
101b0 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
101c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
101d0 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
101e0 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
101f0 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
10200 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
10210 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
10220 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69  rtual table.** i
10230 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
10240 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
10250 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
10260 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a  shared between.*
10270 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
10280 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
10290 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
102a0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
102b0 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69  base.** schema i
102c0 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
102d0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
102e0 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
102f0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
10300 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
10310 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
10320 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
10330 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
10340 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
10350 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
10360 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
10370 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10380 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
10390 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
103a0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
103b0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
103c0 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
103d0 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20  ables.** within 
103e0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f  the database. So
103f0 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61   that they appea
10400 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  r as part of the
10410 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e   callers.** tran
10420 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61  saction, these a
10430 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20  ccesses need to 
10440 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20  be made via the 
10450 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a  same database.**
10460 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
10470 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
10480 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
10490 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
104a0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
104b0 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
104c0 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
104d0 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
104e0 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
104f0 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
10500 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
10510 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
10520 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
10530 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
10540 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
10550 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
10560 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
10570 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
10580 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
10590 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
105a0 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
105b0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
105c0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
105d0 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
105e0 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
105f0 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
10600 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
10610 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10620 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
10630 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
10640 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
10650 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
10660 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
10670 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
10680 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
10690 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
106a0 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
106b0 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
106c0 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
106d0 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
106e0 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
106f0 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
10700 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a  objects are not.
10710 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  ** deleted and t
10720 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
10730 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74   handles are not
10740 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64   xDisconnect()ed
10750 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
10760 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
10770 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
10780 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
10790 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
107a0 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
107b0 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
107c0 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
107d0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
107e0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
107f0 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
10800 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
10810 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
10820 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74  nected.** next t
10830 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
10840 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
10850 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
10860 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
10870 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
10880 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
10890 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
108a0 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
108b0 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
108c0 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
108d0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
108e0 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
108f0 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
10900 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
10910 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
10920 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
10930 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
10940 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
10950 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
10960 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
10970 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
10980 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
10990 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
109a0 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
109b0 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
109c0 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44  d by.** sqlite3D
109d0 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
109e0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
109f0 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
10a00 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a   VTable.db as.**
10a10 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
10a20 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
10a30 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
10a40 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
10a50 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
10a60 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
10a70 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
10a80 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
10a90 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
10aa0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
10ab0 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
10ac0 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
10ad0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
10ae0 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
10af0 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
10b00 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
10b10 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
10b20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10b30 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
10b40 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
10b50 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
10b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
10b70 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
10b80 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
10b90 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
10ba0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
10bb0 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
10bc0 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
10bd0 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
10be0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10bf0 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
10c00 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
10c10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
10c20 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68   schema for each
10c30 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76   SQL table and v
10c40 69 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74  iew is represent
10c50 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20  ed in memory.** 
10c60 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
10c70 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10c80 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
10c90 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63  ruct Table {.  c
10ca0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
10cb0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
10cc0 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
10cd0 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43   */.  Column *aC
10ce0 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ol;        /* In
10cf0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10d00 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
10d10 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
10d20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
10d30 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20   SQL indexes on 
10d40 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  this table. */. 
10d50 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
10d60 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f  ;     /* NULL fo
10d70 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74  r tables.  Point
10d80 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20  s to definition 
10d90 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20  if a view. */.  
10da0 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
10db0 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
10dc0 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69  ist of all forei
10dd0 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20  gn keys in this 
10de0 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  table */.  char 
10df0 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
10e00 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
10e10 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
10e20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
10e30 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
10e40 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
10e50 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
10e60 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
10e70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
10e80 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61   ... also used a
10e90 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69  s column name li
10ea0 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a  st in a VIEW */.
10eb0 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
10ec0 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42         /* Root B
10ed0 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68  Tree page for th
10ee0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31  is table */.  i1
10ef0 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  6 iPKey;        
10f00 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
10f10 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
10f20 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f  iPKey] as the ro
10f30 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f  wid */.  i16 nCo
10f40 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
10f50 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
10f60 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
10f70 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20   */.  u16 nRef; 
10f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10f90 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
10fa0 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
10fb0 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c  /.  LogEst nRowL
10fc0 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69  ogEst;   /* Esti
10fd0 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
10fe0 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
10ff0 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
11000 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52  .  LogEst szTabR
11010 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
11020 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63  ated size of eac
11030 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62  h table row in b
11040 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ytes */.#ifdef S
11050 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53  QLITE_ENABLE_COS
11060 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63  TMULT.  LogEst c
11070 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20  ostMult;     /* 
11080 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20  Cost multiplier 
11090 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74  for using this t
110a0 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
110b0 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
110c0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
110d0 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
110e0 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
110f0 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
11100 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
11110 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
11120 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
11130 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
11140 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
11150 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
11160 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
11170 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
11180 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
11190 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
111a0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
111b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
111c0 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
111d0 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
111e0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
111f0 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
11200 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
11210 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20  duleArg;  /* 0: 
11220 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61  module 1: schema
11230 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e   2: vtab name 3.
11240 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54  ..: args */.  VT
11250 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
11260 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
11270 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
11280 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
11290 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
112a0 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
112b0 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
112c0 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
112d0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
112e0 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
112f0 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
11300 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
11310 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
11320 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
11330 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
11340 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
11350 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
11360 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
11370 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64  .**.** TF_OOOHid
11380 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74  den applies to t
11390 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68  ables or view th
113a0 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63  at have hidden c
113b0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a  olumns that are.
113c0 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e  ** followed by n
113d0 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
113e0 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43  s.  Example:  "C
113f0 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
11400 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76  BLE x USING.** v
11410 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62  tab1(a HIDDEN, b
11420 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20  );".  Since "b" 
11430 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  is a non-hidden 
11440 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69  column but "a" i
11450 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65  s hidden,.** the
11460 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74   TF_OOOHidden at
11470 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70  tribute would ap
11480 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65  ply in this case
11490 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72  .  Such tables r
114a0 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61  equire.** specia
114b0 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e  l handling durin
114c0 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73  g INSERT process
114d0 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing..*/.#define 
114e0 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20  TF_Readonly     
114f0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65     0x01    /* Re
11500 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
11510 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
11520 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
11530 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e     0x02    /* An
11540 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
11550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
11560 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30  asPrimaryKey   0
11570 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  x04    /* Table 
11580 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
11590 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
115a0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
115b0 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0x08    /* Integ
115c0 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
115d0 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
115e0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69  */.#define TF_Vi
115f0 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78  rtual         0x
11600 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69  10    /* Is a vi
11610 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
11620 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
11630 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20  tRowid    0x20  
11640 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
11650 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
11660 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
11670 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
11680 77 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20  wid  0x40    /* 
11690 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20  No user-visible 
116a0 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a  "rowid" column *
116b0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f  /.#define TF_OOO
116c0 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38  Hidden       0x8
116d0 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f  0    /* Out-of-O
116e0 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75  rder hidden colu
116f0 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  mns */.../*.** T
11700 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
11710 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
11720 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
11730 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
11740 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
11750 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
11760 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
11770 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
11780 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
11790 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
117a0 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
117b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
117c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
117d0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
117e0 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58  ual(X)      (((X
117f0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
11800 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 65  _Virtual)!=0).#e
11810 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
11820 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
11830 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
11840 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
11850 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20  ine if a column 
11860 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72  is hidden.  IsOr
11870 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
11880 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72  mn().** only wor
11890 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75  ks for non-virtu
118a0 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e  al tables (ordin
118b0 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76  ary tables and v
118c0 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20  iews) and is.** 
118d0 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c  always false unl
118e0 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ess SQLITE_ENABL
118f0 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
11900 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
11910 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c  e.** IsHiddenCol
11920 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67  umn() macro is g
11930 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a  eneral purpose..
11940 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
11950 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
11960 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20  DEN_COLUMNS).#  
11970 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
11980 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
11990 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
119a0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
119b0 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
119c0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
119d0 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
119e0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
119f0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
11a00 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
11a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
11a20 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66  UALTABLE).#  def
11a30 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
11a40 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
11a50 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
11a60 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
11a70 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
11a80 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
11a90 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a  lumn(X) 0.#else.
11aa0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
11ab0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
11ac0 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
11ad0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
11ae0 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
11af0 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  if.../* Does the
11b00 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
11b10 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
11b20 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
11b30 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
11b40 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
11b50 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
11b60 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
11b70 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
11b80 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
11b90 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
11ba0 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
11bb0 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
11bc0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11bd0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11be0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
11bf0 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
11c00 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
11c10 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
11c20 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
11c30 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
11c40 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
11c50 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
11c60 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
11c70 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
11c80 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
11c90 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
11ca0 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
11cb0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
11cc0 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
11cd0 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
11ce0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
11cf0 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
11d00 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
11d10 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
11d20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
11d30 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
11d40 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
11d50 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
11d60 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
11d70 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
11d80 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
11d90 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
11da0 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
11db0 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
11dc0 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
11dd0 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
11de0 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
11df0 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
11e00 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
11e10 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
11e20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
11e30 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
11e40 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
11e50 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
11e60 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
11e70 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
11e80 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
11e90 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
11ea0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
11eb0 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
11ec0 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
11ed0 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
11ee0 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
11ef0 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
11f00 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
11f10 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
11f20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
11f30 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
11f40 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
11f50 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
11f60 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
11f70 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
11f80 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
11f90 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
11fa0 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
11fb0 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
11fc0 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
11fd0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
11fe0 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
11ff0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
12000 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
12010 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
12020 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
12030 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
12040 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
12050 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
12060 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
12070 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
12080 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
12090 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
120a0 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
120b0 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
120c0 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
120d0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
120e0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
120f0 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
12100 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
12110 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
12120 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
12130 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12140 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
12150 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
12160 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
12170 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
12180 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
12190 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
121a0 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
121b0 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
121c0 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
121d0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
121e0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
121f0 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
12200 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
12210 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
12220 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
12230 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
12240 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
12250 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
12260 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
12270 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
12280 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
12290 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
122a0 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
122b0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
122c0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
122d0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
122e0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
122f0 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
12300 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
12310 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
12320 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
12330 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
12340 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
12350 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
12360 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
12370 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
12380 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
12390 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
123a0 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
123b0 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
123c0 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
123d0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
123e0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
123f0 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
12400 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
12410 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
12420 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
12430 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
12440 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
12450 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
12460 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
12470 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
12480 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
12490 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
124a0 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
124b0 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
124c0 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
124d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
124e0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
124f0 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
12500 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
12510 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
12520 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
12530 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
12540 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
12550 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
12560 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
12570 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
12580 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
12590 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
125a0 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
125b0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
125c0 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
125d0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
125e0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
125f0 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
12600 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
12610 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
12620 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
12630 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
12640 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
12650 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
12660 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
12670 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
12680 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
12690 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
126a0 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
126b0 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
126c0 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
126d0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
126e0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
126f0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
12700 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
12710 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
12720 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
12730 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
12740 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
12750 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
12760 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
12770 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
12780 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
12790 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
127a0 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
127b0 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
127c0 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
127d0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
127e0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
127f0 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
12800 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
12810 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
12820 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
12830 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
12840 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
12850 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
12860 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
12870 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
12880 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
12890 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
128a0 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
128b0 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
128c0 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
128d0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
128e0 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
128f0 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
12900 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
12910 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
12920 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
12930 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
12940 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
12950 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
12960 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
12970 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
12980 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
12990 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
129a0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
129b0 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
129c0 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
129d0 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
129e0 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
129f0 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
12a00 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
12a10 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
12a20 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
12a30 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
12a40 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
12a50 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
12a60 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
12a70 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
12a80 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
12a90 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
12aa0 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
12ab0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
12ac0 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
12ad0 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
12ae0 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
12af0 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
12b00 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
12b10 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
12b20 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
12b30 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
12b40 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
12b50 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
12b60 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
12b70 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
12b80 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
12b90 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
12ba0 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
12bb0 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68  lt  10  /* Do wh
12bc0 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
12bd0 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
12be0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
12bf0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
12c00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
12c10 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
12c20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
12c30 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
12c40 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
12c50 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
12c60 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  l the.** compari
12c70 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
12c80 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
12c90 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
12ca0 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
12cb0 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
12cc0 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
12cd0 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
12ce0 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
12cf0 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
12d00 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
12d10 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
12d20 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
12d30 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
12d40 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
12d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12d60 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
12d70 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
12d80 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
12d90 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
12da0 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
12db0 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
12dc0 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
12dd0 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
12de0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
12df0 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
12e00 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
12e10 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69  ex */.  u16 nXFi
12e20 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
12e30 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12e40 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20   beyond the key 
12e50 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c  columns */.  sql
12e60 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
12e70 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
12e80 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
12e90 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
12ea0 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
12eb0 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
12ec0 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
12ed0 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
12ee0 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
12ef0 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
12f00 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
12f10 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  ;../*.** This ob
12f20 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63  ject holds a rec
12f30 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65  ord which has be
12f40 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
12f50 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
12f60 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65   fields, for the
12f70 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69   purposes of doi
12f80 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ng a comparison.
12f90 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
12fa0 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
12fb0 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
12fc0 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
12fd0 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
12fe0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
12ff0 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
13000 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
13010 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
13020 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
13030 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
13040 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
13050 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
13060 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
13070 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
13080 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
13090 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
130a0 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
130b0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  pcode..**.** An 
130c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
130d0 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61   object serves a
130e0 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f  s a "key" for do
130f0 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a  ing a search on.
13100 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72  ** an index b+tr
13110 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20  ee. The goal of 
13120 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f  the search is to
13130 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20   find the entry 
13140 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65  that.** is close
13150 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73  d to the key des
13160 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f  cribed by this o
13170 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a  bject.  This obj
13180 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a  ect might hold.*
13190 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20  * just a prefix 
131a0 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  of the key.  The
131b0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
131c0 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a  s is given by.**
131d0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
131e0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  d..**.** The r1 
131f0 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72  and r2 fields ar
13200 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20  e the values to 
13210 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b  return if this k
13220 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a  ey is less than.
13230 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  ** or greater th
13240 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  an a key in the 
13250 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76  btree, respectiv
13260 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20  ely.  These are 
13270 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61  normally.** -1 a
13280 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65  nd +1 respective
13290 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65  ly, but might be
132a0 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20   inverted to +1 
132b0 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d  and -1 if the b-
132c0 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45  tree.** is in DE
132d0 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  SC order..**.** 
132e0 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
132f0 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74  on functions act
13300 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66  ually return def
13310 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65  ault_rc when the
13320 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75  y find.** an equ
13330 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  als comparison. 
13340 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
13350 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e  be -1, 0, or +1.
13360 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a    If there are.*
13370 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  * multiple entri
13380 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  es in the b-tree
13390 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
133a0 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f  ey (when only lo
133b0 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20  oking.** at the 
133c0 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e  first pKeyInfo->
133d0 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64  nFields,) then d
133e0 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
133f0 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a   set to -1 to.**
13400 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
13410 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  h to find the la
13420 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20  st match, or +1 
13430 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61  to cause the sea
13440 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74  rch to.** find t
13450 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a  he first match..
13460 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
13470 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
13480 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65  ns will set eqSe
13490 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  en to true if th
134a0 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61  ey ever.** get a
134b0 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73  nd equal results
134c0 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20   when comparing 
134d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74  this structure t
134e0 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72  o a b-tree recor
134f0 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75  d..** When defau
13500 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65  lt_rc!=0, the se
13510 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75  arch might end u
13520 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20  p on the record 
13530 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62  immediately.** b
13540 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
13550 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61  match or immedia
13560 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c  tely after the l
13570 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a  ast match.  The.
13580 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20  ** eqSeen field 
13590 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68  will indicate wh
135a0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
135b0 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73  exact match exis
135c0 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74  ts in the.** b-t
135d0 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ree..*/.struct U
135e0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
135f0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
13600 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
13610 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
13620 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
13630 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
13640 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
13650 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
13660 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
13670 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
13680 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
13690 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
136a0 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
136b0 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
136c0 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
136d0 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
136e0 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
136f0 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
13700 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
13710 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69  or NOMEM) */.  i
13720 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  8 r1;           
13730 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
13740 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
13750 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b  rhs) */.  i8 r2;
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13770 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
13780 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
13790 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20  */.  u8 eqSeen; 
137a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
137b0 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20   if an equality 
137c0 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62  comparison has b
137d0 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a  een seen */.};..
137e0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
137f0 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
13800 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
13810 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
13820 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
13830 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
13840 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
13850 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
13860 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
13870 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
13880 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
13890 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
138a0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
138b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
138c0 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
138d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
138e0 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
138f0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
13900 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
13910 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
13920 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
13930 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
13940 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
13950 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
13960 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
13970 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
13980 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
13990 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
139a0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
139b0 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
139c0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
139d0 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
139e0 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
139f0 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
13a00 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
13a10 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
13a20 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
13a30 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
13a40 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
13a50 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c  the.** first col
13a60 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
13a70 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e  d (c3) has an in
13a80 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e  dex of 2 in Ex1.
13a90 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73  aCol[]..** The s
13aa0 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20  econd column to 
13ab0 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20  be indexed (c1) 
13ac0 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
13ad0 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c  0 in.** Ex1.aCol
13ae0 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69  [], hence Ex2.ai
13af0 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a  Column[1]==0..**
13b00 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e  .** The Index.on
13b10 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65  Error field dete
13b20 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
13b30 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65  r not the indexe
13b40 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73  d columns.** mus
13b50 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20  t be unique and 
13b60 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68  what to do if th
13b70 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65  ey are not.  Whe
13b80 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d  n Index.onError=
13b90 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d  OE_None,.** it m
13ba0 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74  eans this is not
13bb0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e   a unique index.
13bc0 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
13bd0 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  s a unique index
13be0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
13bf0 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72  e of Index.onErr
13c00 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  or indicate the 
13c10 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72  which conflict r
13c20 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67  esolution.** alg
13c30 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
13c40 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
13c50 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
13c60 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
13c70 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
13c80 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
13c90 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
13ca0 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
13cb0 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
13cc0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
13cd0 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
13ce0 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
13cf0 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
13d00 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
13d10 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
13d20 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
13d30 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
13d40 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
13d50 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
13d60 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
13d70 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
13d80 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
13d90 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
13da0 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
13db0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
13dc0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
13dd0 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
13de0 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
13df0 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
13e00 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
13e10 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
13e20 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
13e30 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
13e40 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
13e50 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
13e60 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
13e70 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
13e80 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
13e90 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
13ea0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
13eb0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13ec0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
13ed0 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
13ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
13ef0 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
13f00 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
13f10 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
13f20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
13f30 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
13f40 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
13f50 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
13f60 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
13f70 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
13f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13f90 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
13fa0 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
13fb0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
13fc0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
13fd0 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
13fe0 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
13ff0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
14000 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
14010 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
14020 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
14030 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
14040 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
14050 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
14060 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
14070 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
14080 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
14090 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
140a0 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
140b0 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
140c0 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
140d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61    const char **a
140e0 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72  zColl;     /* Ar
140f0 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
14100 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
14110 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
14120 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
14130 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
14140 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
14150 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
14160 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
14170 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
14180 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
14190 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
141b0 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
141c0 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
141d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
141e0 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
141f0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
14200 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
14210 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
14220 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
14230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14240 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
14250 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
14260 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14280 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
14290 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
142a0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
142b0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
142c0 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
142d0 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
142e0 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
142f0 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
14300 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
14310 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
14320 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
14330 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
14340 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
14350 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
14360 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
14370 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
14380 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
14390 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
143a0 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
143b0 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
143c0 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
143d0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
143e0 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
143f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
14400 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
14410 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
14420 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
14430 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
14440 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
14450 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
14460 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
14470 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
14480 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
14490 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
144a0 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66  n if true */.#if
144b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
144c0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
144d0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
144e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
144f0 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
14500 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
14510 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
14520 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
14530 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
14540 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
14550 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
14560 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
14570 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
14580 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
14590 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
145a0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
145b0 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
145c0 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
145d0 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
145e0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
145f0 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
14600 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
14610 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
14620 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
14630 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
14640 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
14650 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
14660 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
14670 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
14680 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
14690 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e  ed values for In
146a0 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23  dex.idxType.*/.#
146b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
146c0 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20  XTYPE_APPDEF    
146d0 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64    0   /* Created
146e0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e   using CREATE IN
146f0 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DEX */.#define S
14700 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e  QLITE_IDXTYPE_UN
14710 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a  IQUE      1   /*
14720 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e   Implements a UN
14730 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
14740 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
14750 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
14760 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20  YKEY  2   /* Is 
14770 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
14780 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  for the table */
14790 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
147a0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
147b0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64   PRIMARY KEY ind
147c0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
147d0 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
147e0 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70  X)  ((X)->idxTyp
147f0 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50  e==SQLITE_IDXTYP
14800 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f  E_PRIMARYKEY)../
14810 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
14820 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e   index X is a UN
14830 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64  IQUE index */.#d
14840 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e  efine IsUniqueIn
14850 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29  dex(X)      ((X)
14860 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f  ->onError!=OE_No
14870 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65  ne)../* The Inde
14880 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c  x.aiColumn[] val
14890 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ues are normally
148a0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
148b0 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65  r.  But.** there
148c0 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69   are some negati
148d0 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68  ve values that h
148e0 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e  ave special mean
148f0 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing:.*/.#define 
14900 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31  XN_ROWID     (-1
14910 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
14920 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72   column is the r
14930 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
14940 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32  XN_EXPR      (-2
14950 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64  )     /* Indexed
14960 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
14970 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  pression */../*.
14980 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
14990 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
149a0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
149b0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
149c0 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e  n memory.** usin
149d0 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
149e0 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
149f0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
14a00 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
14a10 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
14a20 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
14a30 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
14a40 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
14a50 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
14a60 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20  void *p;        
14a70 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
14a80 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a  sampled record *
14a90 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
14aa0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
14ab0 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73   record in bytes
14ac0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14ad0 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nEq;    /* Est. 
14ae0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
14af0 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
14b00 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
14b10 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
14b20 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Lt;    /* Est. n
14b30 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
14b40 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
14b50 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
14b60 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14b70 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20  nDLt;   /* Est. 
14b80 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
14b90 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
14ba0 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
14bb0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
14bc0 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
14bd0 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
14be0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
14bf0 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
14c00 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
14c10 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
14c20 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
14c30 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
14c40 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
14c50 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
14c60 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
14c70 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
14c80 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
14c90 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
14ca0 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
14cb0 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
14cc0 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
14cd0 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
14ce0 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
14cf0 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
14d00 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
14d10 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
14d20 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
14d30 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
14d40 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
14d50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
14d60 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
14d70 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
14d80 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
14d90 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
14da0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
14db0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
14dc0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
14dd0 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
14de0 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
14df0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
14e00 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
14e10 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
14e20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
14e30 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
14e40 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
14e50 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
14e60 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
14e70 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
14e80 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
14e90 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
14ea0 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
14eb0 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
14ec0 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
14ed0 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
14ee0 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
14ef0 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
14f00 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
14f10 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
14f20 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
14f30 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
14f40 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
14f50 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
14f60 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
14f70 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
14f80 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
14f90 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
14fa0 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
14fb0 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
14fc0 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
14fd0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
14fe0 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
14ff0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
15000 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
15010 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
15020 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
15050 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
15060 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
15070 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
15080 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
15090 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
150a0 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
150b0 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
150c0 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
150f0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
15100 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
15110 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
15120 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
15130 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
15140 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
15150 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
15160 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
15170 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
15180 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
15190 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
151a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
151b0 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
151c0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
151d0 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20  t mnReg, mxReg; 
151e0 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f        /* Range o
151f0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
15200 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61  cated for aCol a
15210 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78  nd aFunc */.  Ex
15220 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
15230 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
15240 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
15250 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
15260 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
15270 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
15280 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
15290 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
152a0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
152b0 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
152c0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
152d0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
152e0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
152f0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
15300 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
15310 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
15320 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
15330 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
15340 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
15350 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
15360 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
15370 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
15380 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
15390 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
153a0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
153b0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
153c0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
153d0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
153e0 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
153f0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
15400 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
15410 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
15420 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
15430 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
15440 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15450 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
15460 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
15470 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
15480 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15490 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
154a0 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
154b0 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
154e0 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
154f0 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
15500 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
15530 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
15540 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
15550 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
15560 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
15570 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15580 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
15590 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
155a0 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
155b0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
155c0 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
155d0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
155e0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
155f0 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
15600 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
15610 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
15620 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
15630 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
15640 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
15650 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
15660 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
15670 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
15680 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
15690 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
156a0 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
156b0 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
156c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
156d0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
156e0 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  Func[] */.};../*
156f0 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
15700 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e   ynVar is a sign
15710 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68  ed integer, eith
15720 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d  er 16-bit or 32-
15730 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20  bit..** Usually 
15740 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20  it is 16-bits.  
15750 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41  But if SQLITE_MA
15760 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
15770 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  R is greater.** 
15780 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61  than 32767 we ha
15790 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32  ve to make it 32
157a0 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73  -bit.  16-bit is
157b0 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75   preferred becau
157c0 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65  se.** it uses le
157d0 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65  ss memory in the
157e0 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68   Expr object, wh
157f0 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d  ich is a big mem
15800 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73  ory user.** in s
15810 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73  ystems with lots
15820 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61   of prepared sta
15830 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65  tements.  And fe
15840 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a  w applications.*
15850 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e  * need more than
15860 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20   about 10 or 20 
15870 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20  variables.  But 
15880 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65  some extreme use
15890 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61  rs want.** to ha
158a0 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ve prepared stat
158b0 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72  ements with over
158c0 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73   32767 variables
158d0 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a  , and for them.*
158e0 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  * the option is 
158f0 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f  available (at co
15900 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a  mpile-time)..*/.
15910 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  #if SQLITE_MAX_V
15920 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d  ARIABLE_NUMBER<=
15930 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31  32767.typedef i1
15940 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74  6 ynVar;.#else.t
15950 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72  ypedef int ynVar
15960 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
15970 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20  Each node of an 
15980 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
15990 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20  e parse tree is 
159a0 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
159b0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
159c0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20  ..**.** Expr.op 
159d0 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54  is the opcode. T
159e0 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65  he integer parse
159f0 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72  r token codes ar
15a00 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f  e reused.** as o
15a10 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72  pcodes here. For
15a20 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61   example, the pa
15a30 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f  rser defines TK_
15a40 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  GE to be an inte
15a50 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72  ger.** code repr
15a60 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d  esenting the ">=
15a70 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73  " operator. This
15a80 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f   same integer co
15a90 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20  de is reused.** 
15aa0 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
15ab0 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72   greater-than-or
15ac0 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74  -equal-to operat
15ad0 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  or in the expres
15ae0 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a  sion.** tree..**
15af0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
15b00 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
15b10 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45  literal (TK_INTE
15b20 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54  GER, TK_FLOAT, T
15b30 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b  K_BLOB,.** or TK
15b40 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
15b50 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
15b60 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
15b70 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
15b80 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
15b90 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
15ba0 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
15bb0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
15bc0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a  n contains the.*
15bd0 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
15be0 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
15bf0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
15c00 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
15c10 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
15c20 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
15c30 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
15c40 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
15c50 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
15c60 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
15c70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
15c80 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
15c90 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
15ca0 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
15cb0 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
15cc0 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
15cd0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
15ce0 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
15cf0 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
15d00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
15d10 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
15d20 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
15d30 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
15d40 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
15d50 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
15d60 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
15d70 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
15d80 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
15d90 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
15da0 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
15db0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
15dc0 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
15dd0 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
15de0 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
15df0 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
15e00 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
15e10 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
15e20 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
15e30 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
15e40 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
15e50 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e  ist is.** valid.
15e60 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
15e70 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
15e80 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
15e90 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
15ea0 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
15eb0 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
15ec0 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
15ed0 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
15ee0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
15ef0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
15f00 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
15f10 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
15f20 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
15f30 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
15f40 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
15f50 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
15f60 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
15f70 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
15f80 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
15f90 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
15fa0 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
15fb0 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
15fc0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
15fd0 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
15fe0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
15ff0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
16000 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
16010 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
16020 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
16030 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
16040 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
16050 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16060 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
16070 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
16080 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a   question mark.*
16090 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20  * character '?' 
160a0 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
160b0 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78  SQL) then the Ex
160c0 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20  pr.iTable holds 
160d0 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d  the index.** num
160e0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
160f0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
16100 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16110 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
16120 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
16130 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
16140 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
16150 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
16160 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
16170 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
16180 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
16190 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
161a0 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
161b0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
161c0 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
161d0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
161e0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
161f0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
16200 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
16210 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
16220 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
16230 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
16240 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
16250 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
16260 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
16270 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
16280 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
16290 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
162a0 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
162b0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
162c0 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
162d0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
162e0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
162f0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
16300 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
16310 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
16320 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
16330 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
16340 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
16350 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
16360 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
16370 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
16380 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
16390 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
163a0 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
163b0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
163c0 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
163d0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
163e0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
163f0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
16400 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
16410 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
16420 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
16430 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
16440 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
16450 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
16460 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
16470 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
16480 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
16490 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
164a0 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
164b0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
164c0 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
164d0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
164e0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
164f0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
16500 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
16510 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
16520 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
16530 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
16540 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
16550 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
16560 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
16570 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
16580 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
16590 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
165a0 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
165b0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
165c0 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
165d0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
165e0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
165f0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
16600 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
16610 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
16640 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
16650 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
16660 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
16670 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
16680 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
16690 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
166a0 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
166b0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
166c0 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
166d0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
166e0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
166f0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
16700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
16710 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
16720 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
16730 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
16740 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
16750 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
16760 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
16770 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
16780 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
16790 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
167a0 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
167b0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
167c0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
167d0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
167e0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
167f0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
16800 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
16810 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
16820 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
16830 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
16840 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
16850 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
16860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
168a0 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
168b0 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
168c0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
168d0 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
168e0 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
168f0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
16900 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
16910 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
16920 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
16930 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
16940 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
16950 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
16960 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
16970 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
16980 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
16990 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
169a0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
169b0 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
169c0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
169d0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
169e0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
169f0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
16a00 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
16a10 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
16a20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
16a30 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
16a40 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
16a50 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
16a60 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
16a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
16ab0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
16ac0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
16ad0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
16ae0 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
16af0 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
16b00 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
16b10 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
16b20 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
16b30 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
16b40 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
16b50 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
16b60 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16b80 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
16b90 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
16bc0 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
16bd0 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
16c00 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
16c10 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a  mes likelihood *
16c20 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
16c30 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
16c40 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
16c50 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
16c60 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16c80 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
16c90 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
16ca0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
16cb0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
16cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
16cd0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
16ce0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
16cf0 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
16d00 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
16d10 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
16d20 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
16d30 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
16d40 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
16d50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16d60 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
16d70 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
16d80 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
16db0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
16dc0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16de0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
16df0 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
16e00 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
16e10 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
16e20 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
16e30 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
16e40 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
16e50 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
16e60 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
16e70 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
16e80 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
16e90 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
16ea0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
16eb0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
16ec0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
16ed0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
16ee0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
16ef0 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
16f00 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20  1 /* Originates 
16f10 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75  in ON/USING clau
16f20 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e  se of outer join
16f30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
16f40 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
16f50 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
16f60 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
16f70 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
16f80 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
16f90 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
16fa0 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
16fb0 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
16fc0 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
16fd0 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
16fe0 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
16ff0 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
17000 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
17010 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
17020 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
17030 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
17040 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
17050 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
17060 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
17070 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
17080 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
17090 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
170a0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
170b0 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
170c0 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
170d0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
170e0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
170f0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
17100 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
17110 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
17120 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
17130 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
17140 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
17150 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
17160 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
17170 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
17180 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
17190 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
171a0 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
171b0 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
171c0 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
171d0 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
171e0 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
171f0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
17200 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
17210 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
17220 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
17230 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
17240 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
17250 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
17260 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
17270 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
17280 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
17290 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
172a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
172b0 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
172c0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
172d0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
172e0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
172f0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
17300 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
17310 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
17320 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
17330 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
17340 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
17350 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
17360 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
17370 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
17380 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
17390 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
173a0 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
173b0 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
173c0 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
173d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
173e0 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
173f0 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
17400 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
17410 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
17420 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
17430 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
17440 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
17450 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
17460 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
17470 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  nc 0x080000 /* A
17480 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
17490 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
174a0 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
174b0 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
174c0 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
174d0 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
174e0 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
174f0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
17500 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
17510 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
17520 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
17530 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
17540 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
17550 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f  s     0x400000 /
17560 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
17570 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
17580 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  olumn */../*.** 
17590 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20  Combinations of 
175a0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a  two or more EP_*
175b0 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e   flags.*/.#defin
175c0 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
175d0 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
175e0 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61  bquery) /* Propa
175f0 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20  gate these bits 
17600 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a  up tree */../*.*
17610 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
17620 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
17630 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
17640 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
17650 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
17660 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
17670 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
17680 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
17690 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
176a0 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
176b0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
176c0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
176d0 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
176e0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
176f0 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
17700 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
17710 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
17720 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
17730 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
17740 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
17750 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
17760 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
17770 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
17780 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
17790 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
177a0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
177b0 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
177c0 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
177d0 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
177e0 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
177f0 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
17800 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
17810 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
17820 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
17830 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
17840 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
17850 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
17860 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
17870 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
17880 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
17890 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
178a0 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
178b0 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  pr.** struct, an
178c0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
178d0 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
178e0 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
178f0 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61  r.flags.** and a
17900 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
17910 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
17920 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
17930 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
17940 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
17950 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
17960 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
17970 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
17980 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
17990 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
179a0 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
179b0 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
179c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
179d0 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
179e0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
179f0 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
17a00 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
17a10 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
17a20 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
17a30 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
17a40 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
17a50 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  eader comment.**
17a60 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
17a70 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
17a80 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
17a90 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
17aa0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
17ab0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
17ac0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
17ad0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
17ae0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
17af0 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
17b00 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
17b10 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
17b20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
17b30 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
17b40 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
17b50 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
17b60 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
17b70 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
17b80 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
17b90 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
17ba0 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
17bb0 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
17bc0 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
17bd0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
17be0 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
17bf0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
17c00 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
17c10 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
17c20 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
17c30 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
17c40 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
17c50 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
17c60 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
17c70 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
17c80 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
17c90 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
17ca0 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
17cb0 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
17cc0 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
17cd0 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
17ce0 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
17cf0 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
17d00 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
17d10 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
17d20 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
17d30 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
17d40 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
17d50 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
17d60 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
17d70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
17d80 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
17d90 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
17da0 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
17db0 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
17dc0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
17dd0 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
17de0 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
17df0 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
17e00 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
17e10 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
17e20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
17e30 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
17e40 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
17e50 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
17e60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17e70 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
17e80 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72  he list */.  str
17e90 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
17ea0 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
17eb0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
17ec0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
17ed0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
17ee0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
17ef0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
17f00 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
17f10 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
17f20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
17f30 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
17f40 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
17f50 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
17f60 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
17f70 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
17f80 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
17f90 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
17fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
17fb0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
17fc0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
17fd0 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
17fe0 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
17ff0 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
18000 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
18010 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
18020 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
18030 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
18040 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
18050 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
18060 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
18070 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
18080 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
18090 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69  sable */.    uni
180a0 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
180b0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
180c0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
180d0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
180e0 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
180f0 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
18100 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
18110 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
18120 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
18130 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
18140 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
18150 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
18160 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
18170 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
18180 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
18190 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
181a0 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b      } u;.  } *a;
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
181d0 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
181e0 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
181f0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
18200 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
18210 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
18220 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
18230 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
18240 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
18250 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
18260 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
18270 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
18280 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
18290 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
182a0 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
182b0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
182c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
182d0 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
182e0 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
182f0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
18300 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
18310 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
18320 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
18330 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
18340 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
18350 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
18360 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
18370 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
18380 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
18390 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
183a0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
183b0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
183c0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
183d0 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
183e0 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
183f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
18400 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
18410 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
18420 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
18430 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
18440 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
18450 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
18460 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
18470 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
18480 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
18490 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
184a0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
184b0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
184c0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
184d0 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
184e0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
184f0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
18500 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
18510 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
18520 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
18530 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
18540 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
18550 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
18560 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
18570 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
18580 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
18590 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
185a0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
185b0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
185c0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
185d0 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
185e0 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
185f0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
18600 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
18610 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
18620 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
18630 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
18640 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18650 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
18660 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
18670 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
18680 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
18690 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
186a0 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
186b0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
186c0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
186d0 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
186e0 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
186f0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
18700 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
18710 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
18720 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
18730 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
18740 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
18750 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
18760 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
18770 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
18780 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
18790 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
187a0 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
187b0 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
187c0 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
187d0 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
187e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
187f0 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
18800 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
18810 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
18820 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
18830 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
18840 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
18850 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
18860 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
18870 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
18880 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
18890 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
188a0 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
188b0 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
188c0 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
188d0 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
188e0 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  sk)-1)../*.** Th
188f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
18900 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
18910 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
18920 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
18930 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
18940 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
18950 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
18960 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
18970 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
18980 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
18990 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
189a0 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
189b0 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
189c0 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
189d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
189e0 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
189f0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
18a00 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
18a10 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
18a20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
18a30 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
18a40 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
18a50 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
18a60 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
18a70 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
18a80 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
18a90 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
18aa0 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
18ab0 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
18ac0 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
18ad0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
18ae0 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
18af0 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
18b00 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
18b10 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
18b20 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
18b30 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
18b40 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
18b50 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
18b60 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
18b70 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
18b80 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
18b90 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
18ba0 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
18bb0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
18bc0 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
18bd0 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
18be0 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
18bf0 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
18c00 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
18c10 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
18c20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
18c30 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
18c40 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
18c50 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
18c60 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
18c70 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
18c80 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
18c90 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
18ca0 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
18cb0 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
18cc0 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
18cd0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
18ce0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
18cf0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18d00 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
18d10 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
18d20 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
18d30 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
18d40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18d50 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
18d60 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
18d70 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
18d80 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
18d90 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
18da0 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
18db0 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
18dc0 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
18dd0 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
18de0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
18df0 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
18e00 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
18e10 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
18e20 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
18e30 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
18e40 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
18e50 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
18e60 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
18e70 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
18e80 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
18e90 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
18ea0 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
18eb0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
18ec0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
18ed0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
18ee0 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
18ef0 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
18f00 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
18f10 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
18f20 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
18f30 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
18f40 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
18f50 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
18f60 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
18f70 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
18f80 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
18f90 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
18fa0 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
18fb0 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
18fc0 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
18fd0 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
18fe0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
18ff0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
19000 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
19010 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
19020 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
19030 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
19040 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
19050 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
19060 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
19070 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
19080 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
19090 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
190a0 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
190b0 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
190c0 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
190d0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
190e0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
190f0 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
19100 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
19110 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
19120 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
19130 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
19140 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
19150 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
19160 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
19170 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
19180 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
19190 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
191a0 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
191b0 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
191c0 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
191d0 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
191e0 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
191f0 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
19200 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
19210 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
19220 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
19230 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
19240 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
19250 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
19260 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
19270 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
19280 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
19290 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
192a0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
192b0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
192c0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
192d0 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
192e0 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
192f0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
19300 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
19310 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
19320 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
19330 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
19340 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
19350 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
19360 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
19370 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
19380 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
19390 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
193a0 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  y;    /* Identif
193b0 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
193c0 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
193d0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45  lause */.      E
193e0 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72  xprList *pFuncAr
193f0 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73  g;  /* Arguments
19400 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   to table-valued
19410 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  -function */.   
19420 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78   } u1;.    Index
19430 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20   *pIBIndex;  /* 
19440 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
19450 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
19460 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a   u1.zIndexedBy *
19470 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
19480 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
19490 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
194a0 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
194b0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
194c0 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
194d0 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
194e0 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
194f0 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
19500 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
19510 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
19520 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
19530 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
19540 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
19550 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
19560 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
19570 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
19580 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
19590 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
195a0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
195b0 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
195c0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
195d0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
195e0 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
195f0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
19600 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
19610 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
19620 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
19630 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
19640 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
19650 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
19660 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
19670 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
19680 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
19690 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
196a0 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
196b0 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
196c0 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
196d0 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
196e0 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
196f0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
19700 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
19710 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
19720 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23  ags member..*/.#
19730 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
19740 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
19750 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
19760 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
19770 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
19780 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
19790 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
197a0 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
197b0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
197c0 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
197d0 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
197e0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
197f0 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
19800 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
19810 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
19820 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
19830 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
19840 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
19850 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
19860 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
19870 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  08 /* Ok to retu
19880 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
19890 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
198a0 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50  ne WHERE_OMIT_OP
198b0 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30  EN_CLOSE  0x0010
198c0 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
198d0 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70  s are already op
198e0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  en */.#define WH
198f0 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20  ERE_FORCE_TABLE 
19900 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44       0x0020 /* D
19910 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64  o not use an ind
19920 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a  ex-only search *
19930 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19940 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20  ONETABLE_ONLY   
19950 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20   0x0040 /* Only 
19960 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62  code the 1st tab
19970 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a  le in pTabList *
19980 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19990 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20  NO_AUTOINDEX    
199a0 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c   0x0080 /* Disal
199b0 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  low automatic in
199c0 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
199d0 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20   WHERE_GROUPBY  
199e0 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f          0x0100 /
199f0 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65  * pOrderBy is re
19a00 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20  ally a GROUP BY 
19a10 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19a20 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20  _DISTINCTBY     
19a30 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64    0x0200 /* pOrd
19a40 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erby is really a
19a50 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65   DISTINCT clause
19a60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19a70 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20  E_WANT_DISTINCT 
19a80 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c     0x0400 /* All
19a90 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f   output needs to
19aa0 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a   be distinct */.
19ab0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f  #define WHERE_SO
19ac0 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30  RTBYGROUP      0
19ad0 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74  x0800 /* Support
19ae0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
19af0 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69  orted() */.#defi
19b00 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f  ne WHERE_REOPEN_
19b10 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30  IDX       0x1000
19b20 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f   /* Try to use O
19b30 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23  P_ReopenIdx */.#
19b40 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
19b50 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
19b60 32 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20  2000 /* ONEPASS 
19b70 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
19b80 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
19b90 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49  ine WHERE_USE_LI
19ba0 4d 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30  MIT        0x400
19bb0 30 20 2f 2a 20 54 68 65 72 65 20 69 73 20 61 20  0 /* There is a 
19bc0 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 63  constant LIMIT c
19bd0 6c 61 75 73 65 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c  lause */../* All
19be0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
19bf0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
19c00 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
19c10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
19c20 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
19c30 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
19c40 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
19c50 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
19c60 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
19c70 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
19c80 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
19c90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
19ca0 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
19cb0 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
19cc0 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
19cd0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
19ce0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
19cf0 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
19d00 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
19d10 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
19d20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
19d30 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
19d40 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
19d50 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
19d60 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
19d70 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
19d80 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
19d90 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
19da0 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
19db0 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
19dc0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
19dd0 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
19de0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
19df0 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
19e00 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
19e10 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
19e20 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
19e30 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
19e40 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
19e50 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
19e60 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
19e70 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
19e80 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
19e90 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
19ea0 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
19eb0 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
19ec0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
19ed0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
19ee0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
19ef0 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
19f00 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
19f10 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
19f20 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  st.** context is
19f30 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
19f40 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
19f50 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
19f60 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
19f70 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
19f80 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
19f90 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
19fa0 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
19fb0 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
19fc0 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
19fd0 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
19fe0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
19ff0 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
1a000 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
1a010 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
1a020 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
1a030 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
1a040 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
1a050 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
1a060 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
1a070 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
1a080 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
1a090 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
1a0a0 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
1a0b0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
1a0c0 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
1a0d0 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
1a0e0 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
1a0f0 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
1a100 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
1a110 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1a120 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
1a130 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
1a140 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
1a150 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
1a160 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
1a170 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
1a180 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
1a190 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
1a1a0 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
1a1b0 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
1a1c0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1a1d0 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
1a1e0 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
1a1f0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1a200 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
1a210 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c  al list of resul
1a220 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t-set columns */
1a230 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
1a240 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
1a250 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
1a260 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
1a270 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
1a280 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
1a290 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
1a2a0 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
1a2b0 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
1a2c0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
1a2d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a2e0 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
1a2f0 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
1a300 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
1a310 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1a320 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1a330 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
1a340 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
1a350 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  names */.  u16 n
1a360 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
1a370 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
1a380 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
1a390 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
1a3a0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1a3b0 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
1a3c0 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
1a3d0 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e  s field..**.** N
1a3e0 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  ote:  NC_MinMaxA
1a3f0 67 67 20 6d 75 73 74 20 68 61 76 65 20 74 68 65  gg must have the
1a400 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53   same value as S
1a410 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a  F_MinMaxAgg and.
1a420 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ** SQLITE_FUNC_M
1a430 49 4e 4d 41 58 2e 0a 2a 2a 0a 2a 2f 0a 23 64 65  INMAX..**.*/.#de
1a440 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
1a450 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
1a460 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a470 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1a480 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1a490 48 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32  HasAgg    0x0002
1a4a0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1a4b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1a4c0 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1a4d0 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
1a4e0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
1a4f0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
1a500 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
1a510 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
1a520 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
1a530 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
1a540 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
1a550 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
1a560 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
1a570 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20  ine NC_PartIdx  
1a580 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65   0x0010  /* True
1a590 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20   if resolving a 
1a5a0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48  partial index WH
1a5b0 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ERE */.#define N
1a5c0 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30  C_IdxExpr   0x00
1a5d0 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  20  /* True if r
1a5e0 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73  esolving columns
1a5f0 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58   of CREATE INDEX
1a600 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1a610 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1a620 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1a630 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1a640 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1a650 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1a660 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1a670 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1a680 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
1a690 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
1a6a0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
1a6b0 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
1a6c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1a6d0 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
1a6e0 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
1a6f0 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
1a700 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
1a710 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
1a720 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
1a730 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
1a740 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
1a750 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
1a760 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
1a770 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
1a780 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1a790 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
1a7a0 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
1a7b0 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
1a7c0 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
1a7d0 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
1a7e0 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
1a7f0 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
1a800 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
1a810 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
1a820 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
1a830 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
1a840 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
1a850 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
1a860 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
1a870 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
1a880 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
1a890 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
1a8a0 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
1a8b0 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
1a8c0 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
1a8d0 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
1a8e0 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
1a8f0 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
1a900 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
1a910 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1a920 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
1a930 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
1a940 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
1a950 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
1a960 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
1a970 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
1a980 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
1a990 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
1a9a0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
1a9b0 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
1a9c0 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
1a9d0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1a9e0 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
1a9f0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1aa00 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
1aa10 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
1aa20 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
1aa30 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
1aa40 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
1aa50 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
1aa60 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
1aa70 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1aa80 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1aa90 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1aaa0 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
1aab0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
1aac0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
1aad0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1aae0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
1aaf0 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
1ab00 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
1ab10 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73  XCEPT */.  LogEs
1ab20 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20  t nSelectRow;   
1ab30 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
1ab40 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
1ab50 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65  rows */.  u32 se
1ab60 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
1ab70 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
1ab80 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1ab90 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
1aba0 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
1abb0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1abc0 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
1abd0 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
1abe0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1abf0 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
1ac00 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
1ac10 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
1ac20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
1ac30 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
1ac40 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
1ac50 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
1ac60 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
1ac70 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
1ac80 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
1ac90 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1aca0 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
1acb0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1acc0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1acd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1ace0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
1acf0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
1ad00 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
1ad10 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
1ad20 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
1ad30 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
1ad40 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
1ad50 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1ad60 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
1ad70 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1ad80 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
1ad90 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
1ada0 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
1adb0 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1adc0 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
1add0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
1ade0 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1adf0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
1ae00 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
1ae10 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
1ae20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
1ae30 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
1ae40 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1ae50 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1ae60 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
1ae70 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
1ae80 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1ae90 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1aea0 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1aeb0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1aec0 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1aed0 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1aee0 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1aef0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1af00 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1af10 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
1af20 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
1af30 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
1af40 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
1af50 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
1af60 74 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30  tinct       0x00
1af70 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
1af80 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
1af90 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
1afa0 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30  All            0
1afb0 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75  x00002  /* Inclu
1afc0 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77  des the ALL keyw
1afd0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ord */.#define S
1afe0 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
1aff0 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65   0x00004  /* Ide
1b000 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
1b010 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
1b020 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
1b030 61 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38  ate      0x00008
1b040 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
1b050 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1b060 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1b070 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30  UsesEphemeral  0
1b080 78 30 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20  x00010  /* Uses 
1b090 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
1b0a0 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
1b0b0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
1b0c0 20 20 20 20 20 20 30 78 30 30 30 32 30 20 20 2f        0x00020  /
1b0d0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
1b0e0 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
1b0f0 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
1b100 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
1b110 20 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20      0x00040  /* 
1b120 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
1b130 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
1b140 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
1b150 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
1b160 20 30 78 30 30 30 38 30 20 20 2f 2a 20 50 61 72   0x00080  /* Par
1b170 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
1b180 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  query */.#define
1b190 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
1b1a0 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 53     0x00100  /* S
1b1b0 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
1b1c0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
1b1d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74  .#define SF_Mult
1b1e0 69 56 61 6c 75 65 20 20 20 20 20 30 78 30 30 32  iValue     0x002
1b1f0 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41  00  /* Single VA
1b200 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d  LUES term with m
1b210 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1b220 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
1b230 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30 34 30  dFrom     0x0040
1b240 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1b250 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
1b260 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  OM clause */.#de
1b270 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1b280 76 65 72 74 20 20 20 30 78 30 30 38 30 30 20 20  vert   0x00800  
1b290 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1b2a0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1b2b0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1b2c0 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67  fine SF_MinMaxAg
1b2d0 67 20 20 20 20 20 20 30 78 30 31 30 30 30 20 20  g      0x01000  
1b2e0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e  /* Aggregate con
1b2f0 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72  taining min() or
1b300 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e   max() */.#defin
1b310 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
1b320 20 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20      0x02000  /* 
1b330 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
1b340 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
1b350 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
1b360 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20   SF_FixedLimit  
1b370 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e     0x04000  /* n
1b380 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79  SelectRow set by
1b390 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49   a constant LIMI
1b3a0 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
1b3b0 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 30  Converted      0
1b3c0 78 30 38 30 30 30 20 20 2f 2a 20 42 79 20 63 6f  x08000  /* By co
1b3d0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1b3e0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1b3f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e  */.#define SF_In
1b400 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78 31  cludeHidden  0x1
1b410 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0000  /* Include
1b420 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
1b430 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f  in output */.../
1b440 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
1b450 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e   of a SELECT can
1b460 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
1b470 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1b480 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62   as defined.** b
1b490 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1b4a0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20  lowing macros.  
1b4b0 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78  The "SRT" prefix
1b4c0 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52   means "SELECT R
1b4d0 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a  esult.** Type"..
1b4e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e  **.**     SRT_Un
1b4f0 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20  ion       Store 
1b500 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79  results as a key
1b510 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1b520 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20  index.**        
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65               ide
1b540 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74  ntified by pDest
1b550 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
1b560 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20       SRT_Except 
1b570 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75       Remove resu
1b580 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d  lts from the tem
1b590 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65  porary index pDe
1b5a0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1b5b0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74  **     SRT_Exist
1b5c0 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31  s      Store a 1
1b5d0 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
1b5e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69  pDest->iSDParm i
1b5f0 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  f the result.** 
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65      set is not e
1b620 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mpty..**.**     
1b630 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1b640 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74  Throw the result
1b650 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73  s away.  This is
1b660 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a   used by SELECT.
1b670 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b680 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1b690 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
1b6a0 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72  s whose only pur
1b6b0 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20  pose is.**      
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b6d0 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20  he side-effects 
1b6e0 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  of functions..**
1b6f0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61  .** All of the a
1b700 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f  bove are free to
1b710 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52   ignore their OR
1b720 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54  DER BY clause. T
1b730 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c  hose that.** fol
1b740 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74  low must honor t
1b750 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1b760 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1b770 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65  T_Output      Ge
1b780 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20  nerate a row of 
1b790 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68  output (using th
1b7a0 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a  e OP_ResultRow.*
1b7b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b7c0 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f        opcode) fo
1b7d0 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1b7e0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a  e result set..**
1b7f0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20  .**     SRT_Mem 
1b800 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c          Only val
1b810 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  id if the result
1b820 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   is a single col
1b830 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  umn..**         
1b840 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72              Stor
1b850 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  e the first colu
1b860 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  mn of the first 
1b870 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20  result row.**   
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44    in register pD
1b8a0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65  est->iSDParm the
1b8b0 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65  n abandon the re
1b8c0 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  st.**           
1b8d0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1b8e0 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65   query.  This de
1b8f0 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65  stination implie
1b900 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a  s "LIMIT 1"..**.
1b910 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20  **     SRT_Set  
1b920 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c         The resul
1b930 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67  t must be a sing
1b940 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72  le column.  Stor
1b950 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20  e each.**       
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1b970 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74  w of result as t
1b980 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20  he key in table 
1b990 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1b9a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1b9b0 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
1b9c0 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
1b9d0 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
1b9e0 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ba00 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
1ba10 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
1ba20 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
1ba30 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
1ba40 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
1ba50 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1ba60 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ba70 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
1baa0 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
1bab0 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
1bac0 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
1bad0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
1bae0 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
1baf0 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
1bb00 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1bb20 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1bb30 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
1bb40 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
1bb50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1bb60 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
1bb70 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
1bb80 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
1bb90 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
1bba0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
1bbb0 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
1bbc0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1bbd0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1bbe0 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
1bbf0 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
1bc00 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
1bc30 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
1bc40 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1bc50 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
1bc80 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
1bc90 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
1bca0 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1bcc0 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
1bcd0 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
1bce0 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
1bcf0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1bd00 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
1bd10 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1bd20 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
1bd30 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
1bd40 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
1bd50 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
1bd60 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
1bd90 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
1bda0 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
1bdb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1bdc0 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
1bdd0 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
1bde0 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
1bdf0 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1be10 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1be20 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1be30 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
1be40 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
1be50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1be60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1be70 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1be80 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
1be90 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
1bea0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1beb0 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1bed0 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
1bee0 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
1bef0 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
1bf00 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1bf20 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
1bf30 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
1bf40 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1bf50 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
1bf60 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1bf70 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1bf80 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
1bf90 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
1bfa0 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
1bfb0 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
1bfc0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
1bfd0 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
1bfe0 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
1bff0 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
1c000 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
1c010 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
1c020 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1c030 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1c040 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1c050 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
1c080 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
1c090 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
1c0a0 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
1c0b0 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
1c0c0 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
1c0d0 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
1c0e0 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
1c0f0 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
1c100 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
1c110 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
1c120 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1c130 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
1c140 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
1c150 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
1c160 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
1c170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1c180 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
1c190 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
1c1a0 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
1c1b0 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
1c1c0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1c1d0 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
1c1e0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
1c1f0 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
1c200 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
1c210 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
1c220 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1c230 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1c240 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
1c250 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
1c260 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
1c270 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
1c280 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1c290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1c2a0 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
1c2b0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1c2c0 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
1c2d0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
1c2e0 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
1c2f0 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
1c300 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1c310 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
1c320 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1c330 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
1c340 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
1c350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
1c360 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
1c370 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
1c380 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
1c390 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
1c3a0 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
1c3b0 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
1c3c0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1c3d0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1c3e0 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
1c3f0 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
1c400 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
1c410 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1c420 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
1c430 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
1c440 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1c450 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
1c460 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
1c470 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
1c480 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
1c490 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
1c4a0 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
1c4b0 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
1c4c0 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
1c4d0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1c4e0 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
1c4f0 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
1c500 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1c510 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1c520 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1c530 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1c540 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1c550 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1c560 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1c570 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1c580 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1c590 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1c5a0 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1c5b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1c5c0 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1c5d0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1c5e0 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1c5f0 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ve. */.  char af
1c600 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  fSdst;        /*
1c610 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1c620 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1c630 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  et */.  int iSDP
1c640 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1c650 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1c660 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1c670 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1c680 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1c690 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1c6a0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1c6b0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1c6c0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1c6d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1c6e0 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1c6f0 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1c700 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1c710 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1c720 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1c730 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1c740 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1c750 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1c760 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1c770 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1c780 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1c790 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74  TOINCREMENT.** t
1c7a0 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
1c7b0 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
1c7c0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
1c7d0 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
1c7e0 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
1c7f0 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
1c800 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
1c810 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
1c820 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1c830 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
1c840 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
1c850 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
1c860 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
1c870 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
1c880 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
1c890 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20  nserts are done 
1c8a0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1c8b0 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
1c8c0 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
1c8d0 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
1c8e0 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
1c8f0 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
1c900 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
1c910 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
1c920 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
1c930 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
1c940 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
1c950 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
1c960 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
1c970 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
1c980 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
1c990 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
1c9a0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1c9b0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
1c9c0 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
1c9d0 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
1c9e0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1c9f0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
1ca00 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
1ca10 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1ca20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
1ca30 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
1ca40 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1ca50 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
1ca60 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
1ca70 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f  };../*.** Size o
1ca80 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  f the column cac
1ca90 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  he.*/.#ifndef SQ
1caa0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a  LITE_N_COLCACHE.
1cab0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1cac0 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65  N_COLCACHE 10.#e
1cad0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  ndif../*.** At l
1cae0 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
1caf0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1cb00 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
1cb10 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
1cb20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
1cb30 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
1cb40 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
1cb50 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
1cb60 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
1cb70 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
1cb80 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
1cb90 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
1cba0 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
1cbb0 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
1cbc0 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
1cbd0 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
1cbe0 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
1cbf0 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
1cc00 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
1cc10 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
1cc20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
1cc30 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
1cc40 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
1cc50 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
1cc60 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
1cc70 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
1cc80 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
1cc90 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
1cca0 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
1ccb0 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
1ccc0 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
1ccd0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
1cce0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1ccf0 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
1cd00 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
1cd10 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
1cd20 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
1cd30 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
1cd40 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
1cd50 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1cd60 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
1cd70 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
1cd80 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
1cd90 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
1cda0 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
1cdb0 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
1cdc0 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
1cdd0 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29  T.** statements)
1cde0 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1cdf0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1ce00 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1ce10 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1ce20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1ce30 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1ce40 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1ce50 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1ce60 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1ce70 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1ce80 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1ce90 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1cea0 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1ceb0 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1cec0 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1ced0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1cee0 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1cef0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1cf00 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1cf10 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1cf20 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1cf30 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1cf40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1cf50 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1cf60 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1cf70 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1cf80 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1cf90 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1cfa0 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1cfb0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1cfc0 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1cfd0 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1cfe0 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1cff0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1d000 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1d010 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1d020 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1d030 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1d040 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1d050 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1d060 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1d070 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1d080 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1d090 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1d0a0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1d0b0 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1d0c0 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1d0d0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1d0e0 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1d0f0 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1d100 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1d110 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1d120 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1d130 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1d140 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1d150 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1d160 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1d170 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1d180 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1d190 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1d1a0 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1d1b0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1d1c0 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1d1d0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1d1e0 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1d1f0 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1d200 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1d210 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1d220 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1d230 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1d240 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1d250 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1d260 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1d270 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1d280 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1d290 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1d2a0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1d2b0 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1d2c0 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1d2d0 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1d2e0 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1d2f0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1d300 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1d310 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1d320 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1d330 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1d340 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1d350 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1d360 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1d370 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1d380 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1d390 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1d3a0 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1d3b0 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1d3c0 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1d3d0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1d3e0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1d3f0 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1d400 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1d410 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1d420 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1d430 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1d440 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1d450 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1d460 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1d470 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74  ed-cache.** feat
1d480 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
1d490 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
1d4a0 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
1d4b0 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
1d4c0 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
1d4d0 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
1d4e0 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
1d4f0 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
1d500 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
1d510 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
1d520 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
1d530 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
1d540 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
1d550 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
1d560 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
1d570 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1d580 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
1d590 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
1d5a0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
1d5b0 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
1d5c0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
1d5d0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
1d5e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
1d5f0 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
1d600 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
1d610 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
1d620 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1d630 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
1d640 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
1d650 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
1d660 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
1d670 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
1d680 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
1d690 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
1d6a0 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
1d6b0 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
1d6c0 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
1d6d0 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
1d6e0 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
1d6f0 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
1d700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
1d710 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
1d720 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
1d730 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
1d740 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1d750 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
1d760 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1d770 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
1d780 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
1d790 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
1d7a0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1d7b0 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
1d7c0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1d7d0 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
1d7e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1d7f0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1d800 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
1d810 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
1d820 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
1d830 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
1d840 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
1d850 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1d860 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
1d870 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
1d880 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
1d890 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
1d8a0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c  */.  u8 disableL
1d8b0 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d  ookaside; /* Num
1d8c0 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f  ber of times loo
1d8d0 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20  kaside has been 
1d8e0 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e  disabled */.  in
1d8f0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
1d900 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
1d910 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
1d920 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
1d930 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1d940 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1d950 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1d960 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1d970 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1d980 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1d990 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1d9a0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1d9b0 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1d9c0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1d9d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1d9e0 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1d9f0 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1da00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1da10 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1da20 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1da30 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1da40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1da50 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1da60 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1da70 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
1da80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1da90 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
1daa0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1dab0 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
1dac0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dad0 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
1dae0 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
1daf0 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
1db00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1db10 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
1db20 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1db30 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41  ] */.  int szOpA
1db40 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42  lloc;       /* B
1db50 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73  ytes of memory s
1db60 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66  pace allocated f
1db70 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1db80 0a 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b  .  int iFixedOp;
1db90 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72          /* Never
1dba0 20 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65   back out opcode
1dbb0 73 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20  s iFixedOp-1 or 
1dbc0 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74  earlier */.  int
1dbd0 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
1dbe0 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1dbf0 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
1dc00 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
1dc10 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  nts */.  int iSe
1dc20 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
1dc30 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64   Table of an ind
1dc40 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20 61  ex whose exprs a
1dc50 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a  re being coded *
1dc60 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65  /.  int iCacheLe
1dc70 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43  vel;     /* ColC
1dc80 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20  ache valid when 
1dc90 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76  aColCache[].iLev
1dca0 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20  el<=iCacheLevel 
1dcb0 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43  */.  int iCacheC
1dcc0 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75  nt;       /* Cou
1dcd0 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e  nter used to gen
1dce0 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b  erate aColCache[
1dcf0 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a  ].lru values */.
1dd00 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20    int nLabel;   
1dd10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1dd20 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20   of labels used 
1dd30 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c  */.  int *aLabel
1dd40 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61  ;         /* Spa
1dd50 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c  ce to hold the l
1dd60 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63  abels */.  struc
1dd70 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
1dd80 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
1dd90 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1dda0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
1ddb0 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d  /.    i16 iColum
1ddc0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
1ddd0 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
1dde0 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
1ddf0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
1de00 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
1de10 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
1de20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
1de30 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
1de40 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
1de50 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
1de60 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1de80 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
1de90 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
1dea0 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
1deb0 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
1dec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
1ded0 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
1dee0 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
1def0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
1df00 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
1df10 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1df20 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
1df30 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
1df40 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72   entry */.  Expr
1df50 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
1df60 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
1df70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
1df80 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
1df90 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
1dfa0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
1dfb0 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
1dfc0 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
1dfd0 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
1dfe0 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
1dff0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
1e000 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
1e010 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
1e020 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
1e030 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
1e040 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
1e050 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
1e060 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
1e070 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
1e080 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
1e090 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
1e0a0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1e0b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1e0c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1e0d0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1e0e0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1e0f0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1e100 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1e110 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1e120 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1e130 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1e140 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1e150 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1e160 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1e170 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1e180 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1e190 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1e1a0 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1e1b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e1c0 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1e1d0 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1e1e0 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1e1f0 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1e200 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1e210 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1e220 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1e230 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1e240 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1e250 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1e260 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1e270 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1e280 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1e290 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1e2a0 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1e2b0 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1e2c0 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1e2d0 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1e2e0 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1e2f0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1e300 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1e310 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f  counters */..  /
1e320 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
1e330 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20  ed while coding 
1e340 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
1e350 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  . */.  Parse *pT
1e360 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
1e370 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
1e380 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
1e390 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
1e3a0 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
1e3b0 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
1e3c0 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
1e3d0 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69  coded for */.  i
1e3e0 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  nt addrCrTab;   
1e3f0 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1e400 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  f OP_CreateTable
1e410 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54   opcode on CREAT
1e420 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32  E TABLE */.  u32
1e430 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1e440 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1e450 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1e460 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1e470 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1e480 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1e490 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1e4a0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1e4b0 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1e4c0 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1e4d0 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1e4e0 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1e4f0 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1e500 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1e510 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1e520 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1e530 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1e540 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1e550 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1e560 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1e570 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1e580 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1e590 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1e5a0 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1e5b0 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1e5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e5d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e5e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e600 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1e610 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1e620 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1e630 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1e640 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1e650 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1e660 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1e670 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1e680 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1e690 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1e6a0 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1e6b0 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1e6c0 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1e6d0 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1e6e0 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1e6f0 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1e700 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1e710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79  **********/..  y
1e750 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20  nVar nVar;      
1e760 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e770 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1e780 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1e790 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1e7a0 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1e7b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e7c0 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1e7d0 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1e7e0 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1e7f0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1e800 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1e810 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1e820 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1e830 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
1e840 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1e850 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
1e860 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
1e870 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
1e880 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e890 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
1e8a0 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
1e8b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e8c0 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
1e8d0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1e8e0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
1e8f0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
1e900 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
1e910 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
1e920 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
1e930 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
1e940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e950 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
1e960 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1e970 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
1e980 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
1e990 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
1e9a0 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
1e9b0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
1e9c0 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
1e9d0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1e9e0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
1e9f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ea00 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
1ea10 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
1ea20 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
1ea30 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
1ea40 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
1ea50 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
1ea60 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
1ea70 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1ea80 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1eaa0 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
1eab0 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
1eac0 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
1ead0 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
1eae0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
1eaf0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
1eb00 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
1eb10 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
1eb20 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
1eb30 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
1eb40 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
1eb50 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
1eb60 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
1eb70 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
1eb80 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
1eb90 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
1eba0 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
1ebb0 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
1ebc0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
1ebd0 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
1ebe0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
1ebf0 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
1ec00 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1ec10 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
1ec20 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
1ec30 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
1ec40 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1ec50 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1ec60 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
1ec70 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
1ec80 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
1ec90 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
1eca0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
1ecb0 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
1ecc0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1ecd0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1ece0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
1ecf0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1ed00 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
1ed10 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
1ed20 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
1ed30 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
1ed40 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1ed50 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
1ed60 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
1ed70 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
1ed80 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
1ed90 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
1eda0 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
1edb0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
1edc0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
1edd0 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
1ede0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
1edf0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
1ee00 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
1ee10 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1ee20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
1ee30 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
1ee40 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57  , or NULL */.  W
1ee50 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65  ith *pWithToFree
1ee60 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65  ;        /* Free
1ee70 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63   this WITH objec
1ee80 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  t at the end of 
1ee90 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a  the parse */.};.
1eea0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1eeb0 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
1eec0 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
1eed0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1eee0 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
1eef0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1ef00 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
1ef10 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1ef20 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
1ef30 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1ef40 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
1ef50 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
1ef60 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
1ef70 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1ef80 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1ef90 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
1efa0 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
1efb0 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
1efc0 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
1efd0 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
1efe0 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
1eff0 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
1f000 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
1f010 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
1f020 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1f030 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
1f040 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
1f050 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
1f060 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1f070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1f080 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
1f090 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
1f0a0 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
1f0b0 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
1f0c0 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
1f0d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1f0e0 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
1f0f0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
1f100 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
1f110 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1f120 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f140 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
1f150 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
1f160 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
1f170 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1f180 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
1f190 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1f1a0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
1f1b0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
1f1c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1f1d0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30  ASTROWID     0x0
1f1e0 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  2    /* Set to u
1f1f0 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
1f200 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
1f210 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
1f220 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
1f230 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
1f240 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
1f250 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1f260 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
1f270 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
1f280 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
1f290 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
1f2a0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
1f2b0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
1f2c0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
1f2d0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
1f2e0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 69 66 64  Insert() */.#ifd
1f2f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1f300 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
1f310 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
1f320 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
1f330 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
1f340 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
1f350 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
1f360 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4f 50  endif.#define OP
1f370 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
1f380 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
1f390 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
1f3a0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
1f3b0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1f3c0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
1f3d0 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
1f3e0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1f3f0 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
1f400 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
1f410 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
1f420 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
1f430 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
1f440 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
1f450 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
1f460 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
1f470 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
1f480 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
1f490 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
1f4a0 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
1f4b0 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
1f4c0 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
1f4d0 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
1f4e0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
1f4f0 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
1f500 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
1f510 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
1f520 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
1f530 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
1f540 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
1f550 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1f560 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
1f570 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
1f580 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1f590 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
1f5a0 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
1f5b0 6c 65 74 65 3a 20 6b 65 65 70 20 63 75 72 73 6f  lete: keep curso
1f5c0 72 20 70 6f 73 69 74 69 6f 6e 20 2a 2f 0a 23 64  r position */.#d
1f5d0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58  efine OPFLAG_AUX
1f5e0 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20  DELETE     0x04 
1f5f0 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a     /* OP_Delete:
1f600 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45   index in a DELE
1f610 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  TE op */../*. * 
1f620 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
1f630 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
1f640 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
1f650 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
1f660 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
1f670 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a  t Trigger.. *. *
1f680 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
1f690 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1f6a0 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
1f6b0 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
1f6c0 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
1f6d0 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
1f6e0 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
1f6f0 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
1f700 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a  epresents the. *
1f710 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
1f720 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
1f730 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
1f740 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
1f750 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
1f760 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
1f770 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
1f780 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
1f790 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
1f7a0 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
1f7b0 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
1f7c0 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
1f7d0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
1f7e0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
1f7f0 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
1f800 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
1f810 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
1f820 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
1f830 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
1f840 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
1f850 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
1f860 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
1f870 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
1f880 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
1f890 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
1f8a0 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
1f8b0 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
1f8c0 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
1f8d0 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
1f8e0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
1f8f0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1f900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1f910 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
1f920 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
1f930 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1f940 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
1f950 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1f960 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
1f970 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
1f980 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
1f990 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1f9a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1f9b0 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1f9c0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1f9d0 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
1f9e0 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
1f9f0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1fa00 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
1fa10 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
1fa20 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fa40 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
1fa50 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1fa60 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
1fa70 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
1fa80 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
1fa90 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
1faa0 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
1fab0 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fad0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
1fae0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
1faf0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1fb00 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1fb10 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
1fb20 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1fb30 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
1fb40 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
1fb50 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
1fb60 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1fb70 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
1fb80 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
1fb90 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
1fba0 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
1fbb0 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
1fbc0 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
1fbd0 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
1fbe0 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
1fbf0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1fc00 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
1fc10 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
1fc20 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
1fc30 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
1fc40 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
1fc50 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
1fc60 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
1fc70 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66   which..**.** If
1fc80 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
1fc90 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
1fca0 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
1fcb0 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
1fcc0 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
1fcd0 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
1fce0 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
1fcf0 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
1fd00 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
1fd10 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
1fd20 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1fd30 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
1fd40 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1fd50 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1fd60 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
1fd70 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
1fd80 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
1fd90 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
1fda0 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
1fdb0 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  m.. *. * Instanc
1fdc0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1fdd0 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1fde0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1fdf0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1fe00 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1fe10 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1fe20 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1fe30 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1fe40 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20  ember of the. * 
1fe50 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
1fe60 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
1fe70 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
1fe80 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
1fe90 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
1fea0 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
1feb0 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
1fec0 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  gram.. *. * The 
1fed0 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
1fee0 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
1fef0 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
1ff00 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
1ff10 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
1ff20 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
1ff30 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
1ff40 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
1ff50 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1ff60 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f  y the. * value o
1ff70 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
1ff80 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
1ff90 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
1ffa0 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
1ffb0 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
1ffc0 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
1ffd0 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
1ffe0 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1fff0 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
20000 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
20010 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
20020 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
20030 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
20040 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
20050 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
20060 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  LL.. * zTarget  
20070 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
20080 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
20090 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
200a0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
200b0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
200c0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
200d0 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
200e0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
200f0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
20100 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
20110 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
20120 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
20130 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
20140 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
20150 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
20160 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
20170 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20   .... *         
20180 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
20190 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
201a0 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
201b0 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
201c0 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
201d0 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
201e0 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
201f0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
20200 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
20210 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
20220 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
20230 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
20240 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
20250 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
20260 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
20270 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
20280 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
20290 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f  e NULL.. *. * (o
202a0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
202b0 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
202c0 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
202d0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
202e0 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
202f0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
20300 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
20310 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
20320 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
20330 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
20340 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
20350 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
20360 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
20370 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
20380 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
20390 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
203a0 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
203b0 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
203c0 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
203d0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
203e0 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
203f0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
20400 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75  ent.. *. */.stru
20410 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
20420 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
20430 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
20440 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
20450 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
20460 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
20470 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
20480 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
20490 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
204a0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
204b0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
204c0 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
204d0 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
204e0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
204f0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
20500 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  ECT statement or
20510 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
20520 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a  NTO SELECT ... *
20530 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65  /.  char *zTarge
20540 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  t;       /* Targ
20550 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
20560 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
20570 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
20580 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
20590 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
205a0 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
205b0 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
205c0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
205d0 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
205e0 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e  ause for UPDATE.
205f0 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
20600 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
20610 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
20620 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
20630 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
20640 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
20650 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
20660 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
20670 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
20680 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
20690 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
206a0 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
206b0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
206c0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
206d0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
206e0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
206f0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
20700 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
20710 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
20720 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
20730 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
20740 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
20750 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
20760 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
20770 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
20780 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
20790 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
207a0 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
207b0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
207c0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
207d0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
207e0 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
207f0 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
20800 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
20810 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
20820 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
20830 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
20840 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
20850 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
20860 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
20870 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
20880 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
20890 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
208a0 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
208b0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
208c0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
208d0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
208e0 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
208f0 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
20900 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
20910 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
20920 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
20930 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
20940 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
20950 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
20960 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
20970 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
20980 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
20990 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
209a0 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
209b0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
209c0 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
209d0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
209e0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
209f0 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
20a00 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
20a10 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
20a20 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
20a30 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
20a40 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
20a50 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
20a60 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
20a70 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
20a80 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
20a90 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20    u32  nChar;   
20aa0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
20ab0 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
20ac0 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20  o far */.  u32  
20ad0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
20ae0 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
20af0 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
20b00 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20  zText */.  u32  
20b10 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
20b20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
20b30 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ed allocation.  
20b40 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20  0 for no malloc 
20b50 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20  usage */.  u8   
20b60 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
20b70 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
20b80 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
20b90 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70  OBIG */.  u8   p
20ba0 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f  rintfFlags;    /
20bb0 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20  * SQLITE_PRINTF 
20bc0 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  flags below */.}
20bd0 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
20be0 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
20bf0 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
20c00 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20  OBIG  2.#define 
20c10 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
20c20 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20  TERNAL 0x01  /* 
20c30 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c  Internal-use-onl
20c40 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c  y converters all
20c50 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
20c60 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
20c70 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20  LFUNC  0x02  /* 
20c80 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  SQL function arg
20c90 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e  uments to VXPrin
20ca0 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tf */.#define SQ
20cb0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
20cc0 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72  OCED 0x04  /* Tr
20cd0 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61  ue if xText is a
20ce0 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a  llocated space *
20cf0 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c  /..#define isMal
20d00 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d  loced(X)  (((X)-
20d10 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53  >printfFlags & S
20d20 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
20d30 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a  LOCED)!=0).../*.
20d40 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
20d50 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
20d60 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
20d70 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
20d80 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
20d90 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
20da0 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
20db0 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
20dc0 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
20dd0 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
20de0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
20df0 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
20e00 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
20e10 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
20e20 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
20e30 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
20e40 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
20e50 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
20e60 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
20e70 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
20e80 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
20e90 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
20ea0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
20eb0 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
20ec0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
20ed0 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
20ee0 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
20ef0 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
20f00 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
20f10 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
20f20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
20f30 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
20f40 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
20f50 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
20f60 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
20f70 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
20f80 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fa0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
20fb0 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
20fc0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
20fd0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
20fe0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
20ff0 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
21000 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
21010 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21030 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
21040 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
21050 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
21060 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
21070 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
21080 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
21090 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
210a0 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
210d0 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
210e0 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
210f0 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21110 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
21120 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
21130 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
21140 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
21150 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
21160 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
21170 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
21180 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
21190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
211a0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
211b0 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
211c0 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
211d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
211e0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
211f0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
21200 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  count */.  int n
21210 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20  StmtSpill;      
21220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21230 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69  Stmt-journal spi
21240 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73  ll-to-disk thres
21250 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hold */.  sqlite
21260 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
21270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
21280 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
21290 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
212a0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
212b0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
212c0 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
212d0 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
212e0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
212f0 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
21300 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
21310 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
21320 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
21330 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
21340 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
21350 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
21360 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
21370 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21390 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
213a0 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
213b0 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213d0 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
213e0 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
213f0 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
21400 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
21410 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
21420 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
21430 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
21440 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
21450 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
21460 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
21470 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
21480 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20  void *pScratch; 
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214a0 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d    /* Scratch mem
214b0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53  ory */.  int szS
214c0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
214d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
214e0 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
214f0 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  ch buffer */.  i
21500 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20  nt nScratch;    
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21520 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63   /* Number of sc
21530 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f  ratch buffers */
21540 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21560 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
21570 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
21580 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
21590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215a0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
215b0 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
215c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
215f0 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
21600 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
21610 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21630 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
21640 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
21650 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
21660 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
21670 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
21680 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
21690 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
216a0 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20  .  u32 szPma;   
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216c0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
216d0 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20  Sorter PMA size 
216e0 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
216f0 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
21700 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
21710 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
21720 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
21730 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
21740 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
21750 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
21760 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
21770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21780 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
21790 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
217a0 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
217b0 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
217c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
217d0 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
217e0 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
217f0 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
21800 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
21810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
21820 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
21830 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
21840 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
21850 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
21860 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21870 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
21880 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
21890 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
218a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
218b0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
218c0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
218d0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
218e0 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21900 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
21910 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
21920 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
21930 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
21940 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
21950 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
21960 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
21970 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
21980 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
21990 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
219a0 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
219b0 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
219c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
219d0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
219e0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
219f0 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
21a00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
21a10 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
21a20 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
21a30 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
21a40 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
21a50 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
21a60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
21a70 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
21a80 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
21a90 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
21aa0 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
21ab0 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
21ac0 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
21ad0 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
21ae0 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
21af0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
21b00 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
21b10 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
21b20 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69  eBranch)(void*,i
21b30 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  nt iSrcLine,u8 e
21b40 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
21b50 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
21b60 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
21b70 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
21ba0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
21bb0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
21bc0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
21bd0 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65  TEST.  int (*xTe
21be0 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29  stCallback)(int)
21bf0 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f  ;        /* Invo
21c00 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61  ked by sqlite3Fa
21c10 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64  ultSim() */.#end
21c20 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  if.  int bLocalt
21c30 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
21c40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
21c50 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
21c60 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a  () calls */.};..
21c70 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
21c80 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
21c90 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
21ca0 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
21cb0 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
21cc0 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
21cd0 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
21ce0 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
21cf0 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
21d00 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
21d10 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
21d20 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
21d30 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
21d40 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
21d50 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
21d60 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
21d70 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
21d80 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
21d90 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
21da0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
21db0 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
21dc0 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
21dd0 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
21de0 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
21df0 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
21e00 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
21e10 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
21e20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
21e30 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
21e40 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
21e50 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
21e60 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
21e70 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
21e80 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
21e90 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
21ea0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
21eb0 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
21ec0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
21ed0 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
21ee0 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
21ef0 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
21f00 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
21f10 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
21f20 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61  ct Walker {.  Pa
21f30 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f50 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
21f60 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
21f70 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
21f80 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
21f90 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
21fa0 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
21fb0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
21fc0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
21fd0 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
21fe0 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
21ff0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
22000 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
22010 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
22020 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
22030 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
22040 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
22050 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
22060 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
22080 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
22090 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
220a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
220d0 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
220e0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
22110 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
22120 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
22130 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22150 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
22160 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
22170 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
221a0 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
221b0 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
221c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
221e0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
221f0 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
22200 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
22230 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
22240 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
22250 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
22260 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
22270 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
22280 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43  */.    struct CC
22290 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e  urHint *pCCurHin
222a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
222b0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64    /* Used by cod
222c0 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f  eCursorHint() */
222d0 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b  .    int *aiCol;
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22300 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75  /* array of colu
22310 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20  mn indexes */.  
22320 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
22330 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
22340 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
22350 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
22360 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
22370 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
22380 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
22390 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
223a0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
223b0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
223c0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
223d0 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
223e0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
223f0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
22400 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
22410 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
22420 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70  ite3ExprWalkNoop
22430 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
22440 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
22450 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61  code from the pa
22460 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67  rse-tree walking
22470 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20   primitives and 
22480 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  their.** callbac
22490 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ks..*/.#define W
224a0 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30  RC_Continue    0
224b0 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64     /* Continue d
224c0 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65  own into childre
224d0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  n */.#define WRC
224e0 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20  _Prune       1  
224f0 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65   /* Omit childre
22500 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77  n but continue w
22510 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20  alking siblings 
22520 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41  */.#define WRC_A
22530 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f  bort       2   /
22540 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72  * Abandon the tr
22550 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a  ee walk */../*.*
22560 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
22570 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
22580 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74  represents a set
22590 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   of one or more 
225a0 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20  CTEs.** (common 
225b0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
225c0 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20  s) created by a 
225d0 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
225e0 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69  se..*/.struct Wi
225f0 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b  th {.  int nCte;
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22610 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
22620 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20   of CTEs in the 
22630 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20  WITH clause */. 
22640 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20   With *pOuter;  
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22660 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57   /* Containing W
22670 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
22680 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ULL */.  struct 
22690 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20  Cte {           
226a0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
226b0 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20  each CTE in the 
226c0 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20  WITH clause.... 
226d0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
226e0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
226f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
22700 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
22710 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c    ExprList *pCol
22720 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
22730 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70    /* List of exp
22740 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d  licit column nam
22750 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  es, or NULL */. 
22760 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
22770 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ct;             
22780 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69     /* The defini
22790 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45  tion of this CTE
227a0 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   */.    const ch
227b0 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20  ar *zCteErr;    
227c0 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
227d0 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72   message for cir
227e0 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73  cular references
227f0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b   */.  } a[1];.};
22800 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22810 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  DEBUG./*.** An i
22820 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54  nstance of the T
22830 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69  reeView object i
22840 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74  s used for print
22850 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ing the content 
22860 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63  of.** data struc
22870 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33  tures on sqlite3
22880 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73  DebugPrintf() us
22890 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20  ing a tree-like 
228a0 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  view..*/.struct 
228b0 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74  TreeView {.  int
228c0 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
228d0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65       /* Which le
228e0 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20  vel of the tree 
228f0 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75  we are on */.  u
22900 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20  8  bLine[100];  
22910 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76         /* Draw v
22920 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d  ertical in colum
22930 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20  n i if bLine[i] 
22940 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65  is true */.};.#e
22950 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
22960 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  EBUG */../*.** A
22970 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
22980 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
22990 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
229a0 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
229b0 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
229c0 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
229d0 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
229e0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
229f0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
22a00 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
22a10 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
22a20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
22a30 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
22a40 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
22a70 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
22a80 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
22a90 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
22aa0 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
22ae0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
22af0 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
22b00 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
22b10 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
22b20 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
22b30 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
22b40 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
22b50 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
22b60 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
22b70 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
22b80 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
22b90 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
22ba0 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
22bb0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
22bc0 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
22bd0 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
22be0 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
22bf0 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
22c00 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
22c10 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
22c20 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
22c30 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
22c40 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
22c50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
22c60 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
22c70 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
22c80 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
22c90 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
22ca0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
22cb0 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
22cc0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
22cd0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
22ce0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
22cf0 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
22d00 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
22d10 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
22d20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
22d30 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  BUG.  int sqlite
22d40 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  3NomemError(int)
22d50 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  ;.  int sqlite3I
22d60 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69  oerrnomemError(i
22d70 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51  nt);.# define SQ
22d80 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
22d90 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
22da0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
22db0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
22dc0 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  R_NOMEM_BKPT sql
22dd0 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
22de0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65  ror(__LINE__).#e
22df0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
22e00 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ITE_NOMEM_BKPT S
22e10 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65  QLITE_NOMEM.# de
22e20 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
22e30 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c  R_NOMEM_BKPT SQL
22e40 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a  ITE_IOERR_NOMEM.
22e50 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
22e60 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68  S3 and FTS4 both
22e70 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c   require virtual
22e80 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a   table support.*
22e90 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
22ea0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22eb0 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20  LTABLE).# undef 
22ec0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22ed0 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  S3.# undef SQLIT
22ee0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65  E_ENABLE_FTS4.#e
22ef0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  ndif../*.** FTS4
22f00 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
22f10 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
22f20 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
22f30 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
22f40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
22f50 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
22f60 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
22f70 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
22f80 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
22f90 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
22fa0 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
22fb0 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
22fc0 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
22fd0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
22fe0 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
22ff0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23000 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
23010 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
23020 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
23030 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
23040 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
23050 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
23060 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
23070 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
23080 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
23090 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
230a0 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
230b0 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
230c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
230d0 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
230e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
230f0 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
23100 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
23110 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
23120 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
23130 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
23140 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23150 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
23160 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
23170 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
23180 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
23190 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
231a0 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
231b0 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
231c0 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
231d0 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
231e0 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
231f0 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
23200 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
23210 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
23220 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
23230 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
23240 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
23250 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
23260 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
23270 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
23280 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
23290 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
232a0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
232b0 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
232c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
232d0 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
232e0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
232f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
23300 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
23310 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
23320 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
23330 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
23340 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
23350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
23360 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
23370 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
23380 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
23390 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
233a0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
233b0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
233c0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
233d0 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
233e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
233f0 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
23400 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
23410 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23420 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  )]).#else.# defi
23430 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
23440 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
23450 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23460 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
23470 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
23480 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
23490 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
234a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
234b0 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
234c0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
234d0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
234e0 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
234f0 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
23500 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
23510 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
23520 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
23530 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
23540 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
23550 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
23560 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
23570 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
23580 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23590 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
235a0 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
235b0 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66  char)(x)).#endif
235c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
235d0 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
235e0 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c  ON_DIAGS.int sql
235f0 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
23600 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
23610 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
23620 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
23630 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43  int sqlite3StrIC
23640 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  mp(const char*,c
23650 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
23660 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
23670 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  (const char*);.c
23680 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75  har *sqlite3Colu
23690 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63  mnType(Column*,c
236a0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
236b0 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
236c0 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
236d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
236e0 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
236f0 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
23700 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
23710 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75  *sqlite3Malloc(u
23720 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
23730 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34  e3MallocZero(u64
23740 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23750 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
23760 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
23770 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
23780 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
23790 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
237a0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
237b0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
237c0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
237d0 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
237e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
237f0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
23800 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
23810 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  nst char*, u64);
23820 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
23830 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
23840 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23850 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
23860 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
23870 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
23880 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
23890 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
238a0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
238b0 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
238c0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
238d0 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
238e0 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
238f0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
23900 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
23910 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
23920 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
23930 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
23940 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
23950 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
23960 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
23970 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23980 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
23990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
239a0 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
239b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
239c0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
239d0 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  EST.void sqlite3
239e0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
239f0 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
23a00 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
23a10 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
23a20 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
23a30 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
23a40 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
23a50 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
23a60 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
23a70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
23a80 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
23a90 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
23aa0 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
23ab0 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
23ac0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
23ad0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
23ae0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
23af0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
23b00 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
23b10 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
23b20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
23b30 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
23b40 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
23b50 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
23b60 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
23b70 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
23b80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
23b90 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
23ba0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
23bb0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
23bc0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
23bd0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
23be0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
23bf0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
23c00 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
23c10 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
23c20 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,P).#else.# defi
23c30 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
23c40 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
23c50 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
23c60 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
23c70 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
23c80 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
23c90 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
23ca0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
23cb0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
23cc0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
23cd0 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
23ce0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
23cf0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
23d00 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
23d10 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
23d20 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
23d30 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
23d40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
23d50 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
23d60 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
23d70 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
23d80 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
23d90 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
23da0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
23db0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
23dc0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
23dd0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
23de0 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
23df0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
23e00 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
23e10 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
23e20 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
23e30 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
23e40 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
23e50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
23e60 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
23e70 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
23e80 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
23e90 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
23ea0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
23eb0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
23ec0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
23ed0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
23ee0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f  MemoryBarrier(vo
23ef0 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
23f00 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  ine sqlite3Memor
23f10 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69  yBarrier().#endi
23f20 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
23f30 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
23f40 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
23f50 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
23f60 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23f70 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
23f80 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
23f90 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69   sqlite3StatusHi
23fa0 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74  ghwater(int, int
23fb0 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
23fc0 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
23fd0 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
23fe0 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
23ff0 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
24000 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
24010 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
24020 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
24030 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66  (void);..#ifndef
24040 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
24050 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e  ATING_POINT.  in
24060 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64  t sqlite3IsNaN(d
24070 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20  ouble);.#else.# 
24080 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24090 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
240a0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
240b0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
240c0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
240d0 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
240e0 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75   about SQL.** fu
240f0 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74  nctions argument
24100 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70  s that are the p
24110 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65  arameters to the
24120 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69   printf() functi
24130 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72  on..*/.struct Pr
24140 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a  intfArguments {.
24150 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20    int nArg;     
24160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
24170 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  tal number of ar
24180 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  guments */.  int
24190 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20   nUsed;         
241a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
241b0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65  of arguments use
241c0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71  d so far */.  sq
241d0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
241e0 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72  Arg;   /* The ar
241f0 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f  gument values */
24200 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  .};..void sqlite
24210 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
24220 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  um*, const char*
24230 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64  , va_list);.void
24240 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
24250 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
24260 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
24270 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
24280 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
24290 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
242a0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
242b0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
242c0 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
242d0 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
242e0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
242f0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
24300 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
24310 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
24320 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
24330 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
24340 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
24350 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
24360 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
24370 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
24380 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
24390 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
243a0 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
243b0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
243c0 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
243d0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
243e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
243f0 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
24400 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
24410 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
24420 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
24430 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
24440 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
24450 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
24460 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
24470 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
24480 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
24490 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
244a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  );.#endif...void
244b0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
244c0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
244d0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
244e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
244f0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
24500 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
24510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
24520 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f  quote(char*);.vo
24530 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49  id sqlite3TokenI
24540 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a  nit(Token*,char*
24550 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
24560 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
24570 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
24580 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
24590 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
245a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
245b0 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
245c0 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
245d0 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
245e0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
245f0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
24600 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
24610 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
24620 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
24630 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
24640 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
24650 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
24660 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
24670 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24680 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
24690 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  che(Parse*);.#if
246a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
246b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65  .int sqlite3NoTe
246c0 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65  mpsInRange(Parse
246d0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64  *,int,int);.#end
246e0 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  if.Expr *sqlite3
246f0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
24700 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
24710 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
24720 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
24730 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
24740 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
24750 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
24760 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
24770 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
24780 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
24790 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
247a0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
247b0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
247c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
247d0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
247e0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
247f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
24800 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
24810 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
24820 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24830 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
24840 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
24850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24860 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
24870 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
24880 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
24890 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
248a0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
248b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
248c0 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
248d0 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
248e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
248f0 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
24900 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
24910 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
24920 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
24930 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
24940 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
24950 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
24960 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
24970 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
24980 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
24990 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
249a0 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
249b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
249c0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
249d0 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
249e0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
249f0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
24a00 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
24a10 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
24a20 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24a30 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
24a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
24a50 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
24a60 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
24a70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24a80 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
24a90 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
24aa0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
24ab0 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
24ac0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
24ad0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
24ae0 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
24af0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
24b00 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
24b10 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
24b20 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
24b30 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
24b40 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
24b50 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
24b60 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  umn**);.Table *s
24b70 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
24b80 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
24b90 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
24ba0 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
24bb0 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
24bc0 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
24bd0 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
24be0 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
24bf0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
24c00 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
24c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
24c20 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
24c30 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
24c40 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
24c50 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
24c60 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
24c70 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
24c80 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
24c90 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
24ca0 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
24cb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24cc0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
24cd0 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
24ce0 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
24cf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
24d00 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
24d10 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
24d20 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
24d30 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
24d40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24d50 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
24d60 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
24d70 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
24d80 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
24d90 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
24da0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
24db0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
24dc0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
24dd0 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
24de0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
24df0 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
24e00 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24e10 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
24e20 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24e30 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
24e40 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
24e50 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
24e60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
24e70 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
24ea0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
24eb0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
24ec0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
24ed0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
24ee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
24ef0 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
24f00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
24f10 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
24f20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24f30 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
24f40 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
24f50 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
24f60 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
24f70 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
24f80 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
24f90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
24fa0 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
24fb0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
24fc0 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
24fd0 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
24fe0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
24ff0 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
25000 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
25010 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
25020 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
25030 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
25040 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
25050 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
25060 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
25070 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
25080 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
25090 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73  ILTIN_TEST.int s
250a0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
250b0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
250c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
250d0 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
250e0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
250f0 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
25100 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25110 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
25120 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
25130 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
25140 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
25150 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
25160 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
25170 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
25180 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
25190 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
251a0 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
251b0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
251c0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
251d0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  n*,Token*,ExprLi
251e0 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  st*,Select*,int,
251f0 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
25200 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
25210 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
25220 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
25230 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
25240 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
25250 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
25260 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
25270 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25280 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
25290 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
252a0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
252b0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
252c0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
252d0 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
252e0 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
252f0 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
25300 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
25310 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25320 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
25330 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
25340 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
25350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25360 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
25370 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
25380 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25390 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
253a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
253b0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
253c0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
253d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
253e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
253f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
25400 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25410 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
25420 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
25430 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
25440 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
25450 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
25460 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
25470 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
25480 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
25490 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
254a0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
254b0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
254c0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
254d0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
254e0 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
254f0 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
25500 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
25510 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
25520 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
25530 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
25540 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
25550 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
25560 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
25570 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
25580 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
25590 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
255a0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
255b0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
255c0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
255d0 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
255e0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
255f0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
25630 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
25640 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25650 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
25660 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
25670 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
25680 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
25690 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
256a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
256b0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
256c0 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
256d0 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
256e0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
256f0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25700 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
25710 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
25720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
25730 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
25740 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
25750 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
25760 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
25770 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
25780 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
25790 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
257a0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
257b0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
257c0 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
257d0 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
257e0 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
257f0 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
25800 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
25810 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
25820 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
25830 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25850 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
25860 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25870 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
25880 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
25890 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
258a0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
258b0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
258c0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
258d0 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
258e0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
258f0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
25900 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25920 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
25930 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70  t*,u32,Expr*,Exp
25940 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25950 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
25960 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
25970 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
25980 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
25990 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
259a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
259b0 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
259c0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
259d0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
259e0 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
259f0 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
25a00 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
25a10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25a20 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
25a30 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
25a40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25a50 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
25a60 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
25a70 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
25a80 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
25a90 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
25aa0 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
25ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25ac0 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
25ad0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
25ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
25af0 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
25b00 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
25b10 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
25b20 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
25b30 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
25b40 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
25b50 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
25b60 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
25b70 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
25b80 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
25b90 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57  .LogEst sqlite3W
25ba0 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
25bb0 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
25bc0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
25bd0 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
25be0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
25bf0 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
25c00 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
25c10 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
25c20 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
25c30 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
25c40 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
25c50 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
25c60 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
25c70 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
25c80 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
25c90 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
25ca0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
25cb0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
25cc0 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
25cd0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
25ce0 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
25cf0 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
25d00 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
25d10 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
25d20 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
25d30 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
25d40 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
25d50 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
25d60 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
25d70 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
25d80 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
25d90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25da0 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
25db0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
25dc0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
25dd0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25de0 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
25df0 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
25e00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
25e10 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
25e20 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
25e30 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
25e40 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
25e50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25e60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
25e70 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
25e80 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
25e90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25ea0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
25eb0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
25ec0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
25ed0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
25ee0 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
25ef0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
25f00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25f10 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
25f20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25f30 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
25f40 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25f50 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
25f60 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
25f70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25f80 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
25f90 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25fa0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
25fb0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
25fc0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
25fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25fe0 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
25ff0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
26000 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
26010 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
26020 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26030 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
26040 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
26050 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
26060 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
26070 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
26080 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
26090 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
260a0 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
260b0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
260c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
260d0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
260e0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
260f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
26100 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
26110 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
26120 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
26130 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
26140 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
26150 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  t, int, u8);.#de
26160 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
26170 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
26180 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
26190 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
261a0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
261b0 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
261c0 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
261d0 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
261e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
261f0 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30  _ECEL_REF      0
26200 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72  x04  /* Use Expr
26210 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
26220 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
26230 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
26240 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
26250 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26260 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
26270 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26280 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26290 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
262a0 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
262b0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
262c0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
262d0 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
262e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
262f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
26300 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
26310 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
26320 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
26330 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
26340 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
26350 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
26360 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
26370 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
26380 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
26390 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
263a0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
263b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
263c0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
263d0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
263e0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
263f0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
26400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
26410 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
26420 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
26430 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
26440 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
26450 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
26460 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
26470 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
26480 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
26490 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
264a0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
264b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
264c0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
264d0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
264e0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
264f0 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
26500 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
26510 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26520 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
26530 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
26540 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26550 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
26560 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
26570 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
26580 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
26590 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
265a0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
265b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
265c0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
265d0 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
265e0 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
265f0 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
26600 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26610 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
26620 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  T.void sqlite3Pr
26630 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
26640 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26650 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
26660 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
26670 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
26680 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
26690 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
266a0 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
266b0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
266c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
266d0 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
266e0 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
266f0 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
26700 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
26710 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
26720 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26730 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
26740 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
26750 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
26760 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
26770 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26780 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
26790 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
267a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
267b0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
267c0 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
267d0 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
267e0 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
267f0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
26800 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
26810 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
26820 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
26830 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
26840 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
26850 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
26860 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c  rFunction(Expr*,
26870 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
26880 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
26890 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
268a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
268b0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
268c0 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  TS.int sqlite3Ex
268d0 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65  prContainsSubque
268e0 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69  ry(Expr*);.#endi
268f0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  f.int sqlite3Exp
26900 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
26910 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
26920 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
26930 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
26940 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
26950 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
26960 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
26970 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
26980 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
26990 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
269a0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
269b0 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
269c0 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
269d0 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
269e0 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
269f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
26a00 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
26a10 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
26a20 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
26a30 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
26a40 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
26a50 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
26a60 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
26a70 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
26a80 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
26a90 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
26aa0 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
26ab0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26ac0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
26ad0 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
26ae0 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
26af0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
26b30 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  t*,int*);.void s
26b40 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
26b50 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
26b60 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
26b70 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
26b80 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26b90 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
26ba0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
26bb0 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
26bc0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
26bd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26be0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
26bf0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
26c00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26c10 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
26c20 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26c30 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
26c40 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26c50 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
26c60 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
26c70 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
26c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
26c90 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
26ca0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
26cb0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
26cc0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
26cd0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
26ce0 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
26cf0 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
26d00 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
26d10 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
26d20 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
26d30 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
26d40 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
26d50 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
26d60 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
26d70 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
26d80 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
26d90 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
26da0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
26db0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
26dc0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
26dd0 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
26de0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
26df0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26e00 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
26e10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
26e20 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26e30 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
26e40 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
26e50 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
26e60 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
26e70 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
26e80 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
26e90 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
26ea0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
26eb0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
26ec0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
26ed0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
26ee0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
26ef0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
26f00 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
26f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26f20 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
26f30 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
26f40 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
26f50 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
26f60 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
26f70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
26f80 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
26f90 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
26fa0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
26fb0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
26fc0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
26fd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
26fe0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
26ff0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
27000 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
27010 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
27020 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
27030 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
27040 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
27050 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
27060 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
27070 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
27080 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
27090 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
270a0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
270d0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
270e0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
270f0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
27100 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
27110 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
27120 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
27130 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27140 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
27150 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
27160 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
27170 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
27180 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
27190 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
271a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
271b0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
271c0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
271d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
271e0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
271f0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
27200 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
27210 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
27220 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
27230 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
27240 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27270 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
27280 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
27290 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
272a0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
272b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
272c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
272d0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
272e0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
272f0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
27300 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27310 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
27320 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
27330 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
27340 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
27350 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
27360 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
27370 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
27380 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
27390 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
273a0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
273b0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
273f0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
27400 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
27410 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
27420 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
27430 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
27440 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
27450 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
27460 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
27470 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
27480 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
27490 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
274a0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
274b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
274c0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
274d0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
274e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
274f0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
27500 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
27510 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
27520 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
27530 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
27540 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
27550 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
27560 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
27570 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
27580 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27590 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
275a0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
275b0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
275c0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
275d0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
275e0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
275f0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
27600 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
27610 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
27620 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
27630 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
27640 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
27650 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
27660 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
27670 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
27680 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
27690 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
276a0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
276b0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
276c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
276d0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
276e0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
276f0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
27700 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
27710 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
27720 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
27730 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
27740 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
27750 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
27760 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
27770 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
27780 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
27790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
277a0 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
277b0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
277c0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
277d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
277e0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
277f0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
27800 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
27810 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
27820 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
27830 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
27840 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
27850 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
27860 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
27870 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
27880 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
27890 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
278a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
278b0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
278c0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
278d0 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
278e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
278f0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
27900 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
27910 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
27920 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
27930 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
27940 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
27950 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
27960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27970 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
27980 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27990 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
279a0 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
279b0 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
279c0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
279d0 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
279e0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
279f0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
27a00 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
27a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
27a20 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
27a30 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
27a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
27a50 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
27a60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27a70 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
27a80 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
27a90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
27aa0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
27ab0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
27ac0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
27ad0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
27ae0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
27af0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
27b00 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
27b10 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
27b20 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27b30 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
27b40 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
27b50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
27b60 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
27b70 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
27b80 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
27b90 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
27ba0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
27bb0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
27bc0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
27bd0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
27be0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
27bf0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
27c00 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
27c10 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
27c20 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
27c30 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
27c40 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
27c50 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
27c60 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
27c70 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
27c80 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
27c90 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
27ca0 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
27cb0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
27cc0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
27cd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27ce0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
27cf0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
27d00 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
27d10 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
27d20 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27d30 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
27d40 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
27d50 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
27d60 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
27d70 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
27d80 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
27d90 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
27da0 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
27db0 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
27dc0 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
27dd0 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
27de0 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
27df0 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
27e00 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
27e10 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
27e20 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
27e30 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
27e40 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
27e50 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
27e60 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
27e70 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
27e80 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
27e90 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
27ea0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
27eb0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
27ec0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
27ed0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
27ee0 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
27ef0 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
27f00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
27f10 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
27f20 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
27f30 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
27f40 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
27f50 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
27f60 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
27f70 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
27f80 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
27f90 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
27fa0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
27fb0 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
27fc0 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
27fd0 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
27fe0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
27ff0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
28000 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
28010 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
28020 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
28030 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
28040 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
28050 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
28060 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
28070 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
28080 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
28090 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
280a0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
280b0 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
280c0 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
280d0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
280e0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
280f0 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
28100 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
28110 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
28120 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
28130 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
28140 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
28150 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
28160 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
28170 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
28180 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
28190 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
281a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
281b0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
281c0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
281d0 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
281e0 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
281f0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
28200 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
28210 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
28220 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
28230 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
28240 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
28250 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
28260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
28270 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
28280 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
28290 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
282a0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
282b0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
282c0 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
282d0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
282e0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
282f0 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
28300 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
28310 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
28320 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
28330 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
28340 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
28350 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
28360 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
28370 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
28380 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
28390 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
283a0 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
283b0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
283c0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
283d0 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
283e0 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
283f0 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
28400 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
28410 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
28420 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
28430 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
28440 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
28450 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
28460 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
28470 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
28480 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
28490 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
284a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
284b0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
284c0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
284d0 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
284e0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
284f0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
28500 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
28510 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
28520 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
28530 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
28540 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
28550 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
28560 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
28570 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
28580 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
28590 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
285a0 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
285b0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
285c0 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
285d0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
285e0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
285f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28600 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
28610 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
28620 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
28630 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
28640 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
28650 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
28660 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
28670 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28680 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
28690 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
286a0 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
286b0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
286c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
286d0 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
286e0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
286f0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
28700 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
28710 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
28720 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
28730 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
28740 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
28750 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
28760 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
28770 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
28780 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
28790 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
287a0 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20  void *,u8,.     
287b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287c0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
287d0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
287e0 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
287f0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
28800 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
28810 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
28820 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
28830 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
28840 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
28850 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
28860 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
28870 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
28880 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
28890 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
288a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
288b0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
288c0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
288d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
288e0 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
288f0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
28900 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
28910 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
28920 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
28930 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
28940 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
28950 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
28960 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
28970 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
28980 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
28990 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
289a0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
289b0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
289c0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
289d0 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
289e0 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
289f0 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
28a00 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
28a10 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
28a20 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
28a30 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
28a40 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
28a50 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
28a60 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
28a70 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
28a80 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
28a90 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
28aa0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
28ab0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
28ac0 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
28ad0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
28ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
28af0 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
28b00 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
28b10 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
28b20 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
28b30 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
28b40 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
28b50 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
28b60 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
28b70 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
28b80 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
28b90 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
28ba0 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
28bb0 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
28bc0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
28bd0 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
28be0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
28bf0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
28c00 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
28c10 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
28c20 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
28c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
28c40 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
28c50 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
28c60 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
28c70 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
28c80 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
28c90 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
28ca0 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
28cb0 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
28cc0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
28cd0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
28ce0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
28cf0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
28d00 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
28d10 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
28d20 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
28d30 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
28d40 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
28d50 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
28d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28d70 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
28d80 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
28d90 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
28da0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28db0 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
28dc0 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
28dd0 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
28de0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
28df0 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
28e00 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
28e10 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
28e20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
28e30 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
28e40 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
28e50 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
28e60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28e70 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
28e80 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
28e90 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
28ea0 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
28eb0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
28ec0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
28ed0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
28ee0 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
28ef0 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
28f00 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
28f10 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
28f20 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
28f30 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20  ar*, u8*);.void 
28f40 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
28f50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
28f60 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28f70 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
28f80 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
28f90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
28fa0 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
28fb0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28fc0 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
28fd0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
28fe0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
28ff0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
29000 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
29010 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
29020 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
29030 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
29040 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
29050 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
29060 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
29070 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
29080 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
29090 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
290a0 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
290b0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
290c0 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
290d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
290e0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
290f0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
29100 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
29110 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
29120 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
29130 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
29140 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
29150 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
29160 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
29170 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
29180 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
29190 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
291a0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
291b0 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
291c0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
291d0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
291e0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
291f0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
29200 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
29210 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
29220 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
29230 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
29240 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
29250 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
29260 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
29270 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20  , int, void *,. 
29280 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
29290 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
292a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
292b0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
292c0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
292d0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
292e0 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
292f0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
29300 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
29310 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
29320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
29330 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
29340 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
29350 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
29360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
29370 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
29380 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
29390 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
293a0 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
293b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
293c0 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
293d0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
293e0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
293f0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
29400 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
29410 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
29420 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29430 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
29440 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
29450 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29460 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
29470 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
29480 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
29490 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
294a0 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
294b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
294c0 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
294d0 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
294e0 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
294f0 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
29500 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
29510 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
29520 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
29530 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
29540 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
29550 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
29560 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
29570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29580 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
29590 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
295a0 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
295b0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
295c0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
295d0 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69  _STAT4.void sqli
295e0 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69  te3AnalyzeFuncti
295f0 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
29600 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
29610 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  SetValue(Parse*,
29620 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
29630 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38  ecord**,Expr*,u8
29640 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
29650 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
29660 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
29670 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
29680 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
29690 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
296a0 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
296b0 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
296c0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
296d0 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
296e0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
296f0 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
29700 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e**);.#endif../*
29710 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
29720 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
29730 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
29740 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
29750 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
29760 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64  *(*)(u64));.void
29770 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
29780 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
29790 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
297a0 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
297b0 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
297c0 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
297d0 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
297e0 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
297f0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
29800 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
29810 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
29820 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
29830 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
29840 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29850 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
29860 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
29870 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
29880 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
29890 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
298a0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
298b0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
298c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
298d0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
298e0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
298f0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
29900 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
29910 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
29920 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29930 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
29940 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
29950 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
29960 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
29970 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
29980 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
29990 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
299a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
299b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
299c0 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
299d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
299e0 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
299f0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
29a00 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
29a10 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
29a20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
29a30 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
29a40 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
29a50 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
29a60 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
29a70 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
29a80 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
29a90 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
29aa0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
29ab0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
29ac0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
29ad0 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
29ae0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
29af0 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
29b00 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
29b10 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
29b20 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
29b30 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
29b40 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
29b50 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
29b60 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
29b70 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
29b80 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
29b90 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
29ba0 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
29bb0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
29bc0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
29bd0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
29be0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
29bf0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
29c00 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
29c10 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
29c20 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
29c30 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
29c40 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
29c50 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
29c60 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
29c70 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
29c80 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
29c90 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
29ca0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
29cb0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
29cc0 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
29cd0 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
29ce0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
29cf0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
29d00 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20  le*);.#  define 
29d10 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
29d20 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
29d30 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
29d40 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
29d50 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
29d60 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
29d70 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
29d80 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
29d90 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
29da0 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
29db0 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
29dc0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
29dd0 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
29de0 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
29df0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
29e00 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
29e10 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
29e20 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
29e30 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
29e40 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
29e50 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
29e60 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
29e70 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
29e80 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
29e90 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
29ea0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
29eb0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
29ec0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
29ed0 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
29ee0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
29ef0 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
29f00 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
29f10 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
29f20 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
29f30 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
29f40 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
29f50 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
29f60 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
29f70 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
29f80 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
29f90 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
29fa0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
29fb0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
29fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
29fd0 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
29fe0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
29ff0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2a000 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2a010 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2a020 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2a030 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2a040 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2a050 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2a060 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2a070 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2a080 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2a090 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2a0a0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2a0b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2a0c0 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2a0d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2a0e0 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2a0f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2a100 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2a110 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2a120 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2a130 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2a140 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2a150 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2a160 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2a170 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2a180 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2a190 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2a1a0 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2a1b0 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2a1c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a1d0 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2a1e0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2a1f0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2a200 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2a210 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2a220 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2a230 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2a240 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2a250 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2a260 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2a270 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2a280 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2a290 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2a2a0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2a2b0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2a2c0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2a2d0 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2a2e0 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2a2f0 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2a300 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2a310 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2a320 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2a330 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2a340 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
2a350 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2a360 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2a370 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2a380 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2a390 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2a3a0 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2a3b0 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2a3c0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2a3d0 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2a3e0 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2a3f0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2a400 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2a410 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2a420 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2a430 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2a440 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2a450 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2a460 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2a470 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2a480 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2a490 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2a4a0 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2a4b0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2a4c0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2a4d0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2a4e0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2a4f0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2a500 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a510 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2a520 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2a530 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2a540 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2a550 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2a560 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2a570 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2a580 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2a590 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2a5a0 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2a5b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2a5c0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2a5d0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2a5e0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2a5f0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2a600 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2a610 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2a620 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2a630 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2a640 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2a650 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2a660 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2a670 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2a680 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2a690 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2a6a0 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2a6b0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2a6c0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2a6d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2a6e0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2a6f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2a700 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2a710 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2a720 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2a730 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2a740 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2a750 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2a760 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2a770 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2a780 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2a790 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2a7a0 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2a7b0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2a7c0 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2a7d0 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2a7e0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2a7f0 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2a800 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2a810 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2a820 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2a830 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2a840 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2a850 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2a860 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2a870 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2a880 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2a890 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2a8a0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2a8b0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2a8c0 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2a8d0 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2a8e0 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2a8f0 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2a900 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2a910 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2a920 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2a930 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2a940 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
2a950 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20  LTIN_TEST.** is 
2a960 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
2a970 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a980 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
2a990 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2a9a0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2a9b0 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
2a9c0 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
2a9d0 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
2a9e0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2a9f0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2aa00 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
2aa10 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
2aa20 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
2aa30 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
2aa40 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
2aa50 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  rom sqlite3FindI
2aa60 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66  nIndex().*/.#def
2aa70 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57  ine IN_INDEX_ROW
2aa80 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a  ID        1   /*
2aa90 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69   Search the rowi
2aaa0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  d of the table *
2aab0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2aac0 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
2aad0 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e  2   /* Search an
2aae0 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65   ephemeral b-tre
2aaf0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2ab00 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
2ab10 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69     3   /* Existi
2ab20 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49  ng index ASCENDI
2ab30 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2ab40 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53  _INDEX_INDEX_DES
2ab50 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74  C   4   /* Exist
2ab60 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e  ing index DESCEN
2ab70 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2ab80 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20  IN_INDEX_NOOP   
2ab90 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20        5   /* No 
2aba0 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e  table available.
2abb0 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73   Use comparisons
2abc0 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65   */./*.** Allowe
2abd0 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  d flags for the 
2abe0 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  3rd parameter to
2abf0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2ac00 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dex()..*/.#defin
2ac10 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f  e IN_INDEX_NOOP_
2ac20 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  OK     0x0001  /
2ac30 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49  * OK to return I
2ac40 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a  N_INDEX_NOOP */.
2ac50 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2ac60 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30  _MEMBERSHIP  0x0
2ac70 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  002  /* IN opera
2ac80 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d  tor used for mem
2ac90 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a  bership test */.
2aca0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2acb0 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30  _LOOP        0x0
2acc0 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  004  /* IN opera
2acd0 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f  tor used as a lo
2ace0 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  op */.int sqlite
2acf0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
2ad00 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33  se *, Expr *, u3
2ad10 32 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  2, int*);..int s
2ad20 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
2ad30 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
2ad40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
2ad50 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
2ad60 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
2ad70 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
2ad80 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
2ad90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2ada0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
2adb0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
2adc0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
2add0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23  lite3_file *);.#
2ade0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2adf0 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d  e3JournalIsInMem
2ae00 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ory(sqlite3_file
2ae10 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
2ae20 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
2ae30 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2ae40 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
2ae50 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
2ae60 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
2ae70 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
2ae80 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
2ae90 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
2aea0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2aeb0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
2aec0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2aed0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2aee0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
2aef0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2af00 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2af10 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
2af20 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2af30 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
2af40 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
2af50 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
2af60 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
2af70 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
2af80 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
2af90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
2afa0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
2afb0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2afc0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
2afd0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
2afe0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2aff0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2b000 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
2b010 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b020 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2b030 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2b040 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b050 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2b060 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
2b070 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2b080 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2b090 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
2b0a0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2b0b0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
2b0c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2b0d0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2b0e0 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
2b0f0 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
2b100 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
2b110 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
2b120 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
2b130 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
2b140 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
2b150 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
2b160 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
2b170 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
2b180 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
2b190 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
2b1a0 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
2b1b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b1c0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
2b1d0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
2b1e0 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
2b1f0 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
2b200 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
2b210 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2b220 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
2b230 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
2b240 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
2b250 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2b260 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2b270 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
2b280 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
2b290 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
2b2a0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2b2b0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
2b2c0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
2b2d0 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
2b2e0 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
2b2f0 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
2b300 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
2b310 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
2b320 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
2b330 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
2b340 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
2b350 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
2b360 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
2b370 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
2b380 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
2b390 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2b3a0 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
2b3b0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
2b3c0 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
2b3d0 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
2b3e0 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
2b3f0 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
2b400 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
2b410 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
2b420 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
2b430 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2b440 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
2b450 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
2b460 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2b470 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2b480 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2b490 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2b4a0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2b4b0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2b4c0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2b4d0 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
2b4e0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
2b4f0 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2b500 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
2b510 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2b520 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
2b530 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
2b540 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2b550 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2b560 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2b570 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2b580 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2b590 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2b5a0 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
2b5b0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
2b5c0 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
2b5d0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2b5e0 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
2b5f0 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
2b600 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
2b610 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
2b620 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2b630 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
2b640 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
2b650 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
2b660 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
2b670 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
2b680 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
2b690 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
2b6a0 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
2b6b0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
2b6c0 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
2b6d0 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
2b6e0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2b6f0 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
2b700 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
2b710 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
2b720 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
2b730 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2b740 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
2b750 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
2b760 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
2b770 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
2b780 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2b790 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
2b7a0 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
2b7b0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
2b7c0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
2b7d0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
2b7e0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
2b7f0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
2b800 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
2b810 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
2b820 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
2b830 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
2b840 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2b850 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
2b860 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2b870 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
2b880 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2b890 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
2b8a0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2b8b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2b8c0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
2b8d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2b8e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2b8f0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
2b900 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
2b910 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2b920 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
2b930 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2b940 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2b950 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
2b960 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2b970 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
2b980 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
2b990 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2b9a0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2b9b0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
2b9c0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
2b9d0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
2b9e0 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
2b9f0 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
2ba00 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
2ba10 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
2ba20 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2ba30 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
2ba40 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
2ba50 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
2ba60 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
2ba70 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
2ba80 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
2ba90 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
2baa0 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
2bab0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
2bac0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
2bad0 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
2bae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2baf0 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
2bb00 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
2bb10 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
2bb20 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2bb30 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
2bb40 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2bb50 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
2bb60 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
2bb70 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
2bb80 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51  f..#endif /* _SQ
2bb90 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a        LITEINT_H_ */.