/ Hex Artifact Content
Login

Artifact e7468e1b1b69234a26a16918a0e02ac9d3e62a3c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48   The SQLITE_WITH
19a0: 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20  IN(P,S,E) macro 
19b0: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
19c0: 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74   pointer P point
19d0: 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e  s to.** somethin
19e0: 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63  g between S (inc
19f0: 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28 65  lusive) and E (e
1a00: 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a  xclusive)..**.**
1a10: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a20: 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20 61   S is a buffer a
1a30: 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65  nd E is a pointe
1a40: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  r to the first b
1a50: 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  yte after.** the
1a60: 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53   end of buffer S
1a70: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  .  This macro re
1a80: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50 20  turns true if P 
1a90: 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68  points to someth
1aa0: 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64  ing.** contained
1ab0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66 66   within the buff
1ac0: 65 72 20 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  er S..*/.#if def
1ad0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
1ae0: 5f 48 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  _H).# define SQL
1af0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
1b00: 29 20 5c 0a 20 20 20 20 28 28 75 69 6e 74 70 74  ) \.    ((uintpt
1b10: 72 5f 74 29 28 50 29 3e 3d 28 75 69 6e 74 70 74  r_t)(P)>=(uintpt
1b20: 72 5f 74 29 28 53 29 20 26 26 20 28 75 69 6e 74  r_t)(S) && (uint
1b30: 70 74 72 5f 74 29 28 50 29 3c 28 75 69 6e 74 70  ptr_t)(P)<(uintp
1b40: 74 72 5f 74 29 28 45 29 29 0a 23 65 6c 73 65 0a  tr_t)(E)).#else.
1b50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1b60: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
1b70: 50 29 3e 3d 28 53 29 20 26 26 20 28 50 29 3c 28  P)>=(S) && (P)<(
1b80: 45 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E)).#endif../*.*
1b90: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
1ba0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
1bb0: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
1bc0: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
1bd0: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
1be0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
1bf0: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
1c00: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
1c10: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
1c20: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
1c30: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1c40: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1c50: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
1c60: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1c70: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
1c80: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
1c90: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
1ca0: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
1cb0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
1cc0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
1cd0: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
1ce0: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
1cf0: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
1d00: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
1d10: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
1d20: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
1d30: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
1d40: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1d50: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
1d60: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1d70: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
1d80: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
1d90: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
1da0: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
1db0: 31 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1300.#    if !de
1dc0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
1dd0: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
1de0: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
1df0: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
1e00: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
1e10: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
1e20: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
1e30: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
1e40: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
1e50: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
1e60: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
1e70: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
1e80: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
1e90: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
1ea0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
1eb0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
1ec0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
1ed0: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
1ee0: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
1ef0: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
1f00: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
1f10: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
1f20: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
1f30: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
1f40: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
1f50: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
1f60: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
1f70: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
1f80: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
1f90: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
1fa0: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
1fb0: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
1fc0: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
1fd0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
1fe0: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
1ff0: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2000: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2010: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2020: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
2030: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
2040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2050: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
2060: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2070: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2080: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2090: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
20a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
20b0: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
20c0: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
20d0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
20e0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
20f0: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2100: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2110: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
2120: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
2130: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
2140: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2150: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
2160: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2170: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2180: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2190: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
21a0: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
21b0: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
21c0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
21d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
21e0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
21f0: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2200: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
2210: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
2220: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
2230: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
2240: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
2250: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
2260: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2270: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2280: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2290: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
22a0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
22b0: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
22c0: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
22d0: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
22e0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
22f0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2300: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2310: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
2320: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
2330: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
2340: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
2350: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
2360: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2370: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2380: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2390: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
23a0: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
23b0: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
23c0: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
23d0: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
23e0: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
23f0: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2400: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
2410: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
2420: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
2430: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
2440: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
2450: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
2460: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2470: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2480: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2490: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
24a0: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
24b0: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
24c0: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
24d0: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
24e0: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
24f0: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2500: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
2510: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
2520: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
2530: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
2540: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
2550: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
2560: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2570: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2580: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2590: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
25a0: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
25b0: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
25c0: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
25d0: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
25e0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
25f0: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2600: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2610: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2620: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2630: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2640: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2650: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2660: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2670: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2680: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2690: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
26a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
26b0: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
26c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26d0: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
26e0: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
26f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2700: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2710: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2720: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2730: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2740: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2750: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2760: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2770: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2780: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2790: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
27a0: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
27b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
27c0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
27d0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
27e0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
27f0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2800: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2810: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2820: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2830: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2840: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2850: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2860: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2870: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2880: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2890: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
28a0: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
28b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
28c0: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
28d0: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
28e0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
28f0: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2900: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2910: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2920: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2940: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2950: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2960: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2970: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2980: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2990: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
29a0: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
29b0: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
29c0: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
29d0: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
29e0: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
29f0: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2a00: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2a10: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2a20: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2a30: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2a40: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2a50: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2a60: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2a70: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2a80: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2a90: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2aa0: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2ab0: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2ac0: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2ad0: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2af0: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2b00: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2b10: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2b20: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2b30: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2b40: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2b50: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2b60: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
2b70: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
2b80: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
2b90: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2ba0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
2bb0: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
2bc0: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
2bd0: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
2be0: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
2bf0: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
2c00: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
2c10: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
2c20: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
2c30: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
2c40: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
2c50: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
2c60: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
2c70: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
2c80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c90: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2ca0: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
2cb0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2cc0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
2cd0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2ce0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
2cf0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2d00: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
2d10: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
2d20: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
2d30: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
2d40: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
2d50: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d60: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2d70: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
2d80: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
2d90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
2da0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2db0: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
2dc0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
2dd0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
2de0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
2df0: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
2e00: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
2e10: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
2e20: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
2e30: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
2e40: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
2e50: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
2e60: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2e70: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2e80: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2e90: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2ea0: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2eb0: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2ec0: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2ed0: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2ee0: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2ef0: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2f00: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
2f10: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
2f20: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
2f30: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
2f40: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2f50: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2f60: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2f70: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2f80: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2f90: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2fa0: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2fb0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2fc0: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2fd0: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2fe0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2ff0: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3000: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
3010: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
3020: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
3030: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
3040: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
3050: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
3060: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3070: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3080: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3090: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
30a0: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
30b0: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
30c0: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
30d0: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
30e0: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
30f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3100: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
3110: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
3120: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
3130: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
3140: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
3150: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
3160: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3170: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3180: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3190: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
31a0: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
31b0: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
31c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
31d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
31e0: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
31f0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3200: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
3210: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
3220: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
3230: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
3240: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
3250: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
3260: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3270: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3280: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3290: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
32a0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
32b0: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
32c0: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
32d0: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
32e0: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
32f0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3300: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
3310: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
3320: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
3330: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
3340: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
3350: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
3360: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3370: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3380: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3390: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
33a0: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
33b0: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
33c0: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
33d0: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
33e0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
33f0: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3400: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
3410: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
3420: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
3430: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
3440: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
3450: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
3460: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3470: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3480: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3490: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
34a0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
34b0: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
34c0: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
34d0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
34e0: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
34f0: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3500: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
3510: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
3520: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
3530: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
3540: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
3550: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
3560: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3570: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3580: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3590: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
35a0: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
35b0: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
35c0: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
35d0: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
35e0: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
35f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3600: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3610: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3620: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3630: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3640: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3650: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3660: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3670: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3680: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3690: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
36a0: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
36b0: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
36c0: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
36d0: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
36e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
36f0: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3700: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3710: 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e       (1).# defin
3720: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3730: 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (0).#elif !defi
3740: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
3750: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3760: 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65      ((X)?1:(asse
3770: 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69  rt(0),0)).# defi
3780: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3790: 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30    ((X)?(assert(0
37a0: 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20  ),1):0).#else.# 
37b0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
37c0: 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69        (X).# defi
37d0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
37e0: 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a    (X).#endif../*
37f0: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
3800: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
3810: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
3820: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3830: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
3840: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
3850: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
3860: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
3870: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
3880: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
3890: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
38a0: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
38b0: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
38c0: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
38d0: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
38e0: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
38f0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
3900: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
3910: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
3920: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
3930: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
3940: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3950: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
3960: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3970: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
3980: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
3990: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
39a0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
39b0: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
39c0: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
39d0: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
39e0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
39f0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
3a00: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
3a10: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
3a20: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
3a30: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
3a40: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
3a50: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
3a60: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
3a70: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
3a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a90: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
3aa0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
3ab0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
3ac0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3ad0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3ae0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3af0: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
3b00: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
3b10: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
3b20: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
3b30: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
3b40: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
3b50: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
3b60: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
3b70: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
3b80: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
3b90: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
3ba0: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
3bb0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
3bc0: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
3bd0: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
3be0: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
3bf0: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
3c00: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
3c10: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
3c20: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
3c30: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
3c40: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
3c50: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
3c60: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
3c70: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
3c80: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
3c90: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
3ca0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3cb0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3cc0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
3cd0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
3ce0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
3cf0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
3d00: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
3d10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d20: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
3d30: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
3d40: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
3d50: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
3d60: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
3d70: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
3d80: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
3d90: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
3da0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
3db0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
3dc0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
3dd0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
3de0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
3df0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
3e00: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
3e10: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
3e20: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
3e30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
3e40: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
3e50: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
3e60: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
3e70: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
3e80: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
3e90: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
3ea0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
3eb0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
3ec0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
3ed0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
3ee0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
3ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
3f00: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
3f10: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
3f20: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
3f30: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
3f40: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
3f50: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
3f60: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
3f70: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
3f80: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
3f90: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
3fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
3fb0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
3fc0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
3fd0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
3fe0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
3ff0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
4000: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
4010: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
4020: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
4030: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
4040: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
4050: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
4060: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4070: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4080: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4090: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
40a0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
40b0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
40c0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
40d0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
40e0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
40f0: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4100: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4110: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4120: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4130: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4140: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
4150: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
4160: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4180: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4190: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
41a0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
41b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
41c0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
41d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
41e0: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
41f0: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4200: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4210: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4220: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4230: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4240: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
4250: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4260: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4270: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4280: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4290: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
42a0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
42b0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
42c0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
42d0: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
42e0: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
42f0: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4300: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
4310: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
4320: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
4330: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
4340: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4350: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
4360: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4370: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4380: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4390: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
43a0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
43b0: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
43c0: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
43d0: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
43e0: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
43f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4400: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
4410: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
4420: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
4430: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
4440: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
4450: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
4460: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4470: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4480: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4490: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
44a0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
44b0: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
44c0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
44d0: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
44e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
44f0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4500: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
4510: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
4520: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
4530: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
4540: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
4550: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
4560: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4570: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4580: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4590: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
45a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
45b0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
45c0: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
45d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
45e0: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
45f0: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
4600: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
4610: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
4620: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
4630: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
4640: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
4650: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
4660: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4670: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
4680: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
4690: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
46a0: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
46b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
46c0: 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62  f no value has b
46d0: 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72  een provided for
46e0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
46f0: 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69  ER_THREADS, or i
4700: 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50  f.** SQLITE_TEMP
4710: 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f  _STORE is set to
4720: 20 33 20 28 6e 65 76 65 72 20 75 73 65 20 74 65   3 (never use te
4730: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20  mporary files), 
4740: 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72  set it.** to zer
4750: 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  o..*/.#if SQLITE
4760: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c  _TEMP_STORE==3 |
4770: 7c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  | SQLITE_THREADS
4780: 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53  AFE==0.# undef S
4790: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
47a0: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
47b0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  e SQLITE_MAX_WOR
47c0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
47d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
47e0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
47f0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
4800: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4810: 52 5f 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64  R_THREADS 8.#end
4820: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4830: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
4840: 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e  _THREADS.# defin
4850: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4860: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
4870: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
4880: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4890: 45 52 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54  ER_THREADS>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 75 6e 64 65 66 20 53 51 4c  EADS.# undef SQL
48c0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
48d0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
48e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
48f0: 52 5f 54 48 52 45 41 44 53 20 53 51 4c 49 54 45  R_THREADS SQLITE
4900: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4910: 54 48 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a  THREADS.#endif..
4920: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
4930: 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61  t initial alloca
4940: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67  tion for the pag
4950: 65 63 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e  ecache when usin
4960: 67 20 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61  g separate.** pa
4970: 67 65 63 61 63 68 65 73 20 66 6f 72 20 65 61 63  gecaches for eac
4980: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
4990: 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69  ction.  A positi
49a0: 76 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ve number is the
49b0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  .** number of pa
49c0: 67 65 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ges.  A negative
49d0: 20 6e 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c   number N transl
49e0: 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61  ations means tha
49f0: 74 20 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66  t a buffer.** of
4a00: 20 2d 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69   -1024*N bytes i
4a10: 73 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  s allocated and 
4a20: 75 73 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79  used for as many
4a30: 20 70 61 67 65 73 20 61 73 20 69 74 20 77 69 6c   pages as it wil
4a40: 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64  l hold..*/.#ifnd
4a50: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4a60: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a  T_PCACHE_INITSZ.
4a70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4a80: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
4a90: 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e 64 69 66  NITSZ 100.#endif
4aa0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
4ab0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
4ac0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
4ad0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
4ae0: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
4af0: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
4b00: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
4b10: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
4b20: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
4b30: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
4b40: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
4b50: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
4b60: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
4b70: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
4b80: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
4b90: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
4ba0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
4bb0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
4bc0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
4bd0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
4be0: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
4bf0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
4c00: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
4c10: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
4c20: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
4c30: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
4c40: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
4c50: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
4c60: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
4c70: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
4c80: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
4c90: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
4ca0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
4cb0: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
4cc0: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
4cd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
4ce0: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
4cf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
4d00: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
4d10: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
4d20: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
4d30: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
4d40: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
4d50: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
4d60: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
4d70: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
4d80: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
4d90: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
4da0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
4db0: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
4dc0: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
4dd0: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
4de0: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
4df0: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
4e00: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
4e10: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
4e20: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
4e30: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
4e40: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
4e50: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
4e60: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
4e70: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4e80: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
4e90: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
4ea0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
4eb0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4ec0: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
4ed0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
4ee0: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
4ef0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4f00: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
4f10: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4f20: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4f30: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
4f40: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
4f50: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
4f60: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
4f70: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
4f80: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
4f90: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4fa0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
4fb0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
4fc0: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
4fd0: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
4fe0: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
4ff0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5000: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5010: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5020: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5030: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5040: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5050: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5060: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5070: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5080: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5090: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
50a0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
50b0: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
50c0: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
50d0: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
50e0: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
50f0: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5100: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5110: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5120: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5130: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5140: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5150: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5160: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5170: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5180: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5190: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
51a0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
51b0: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
51c0: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
51d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
51e0: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
51f0: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5200: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5210: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5220: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5230: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5240: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5250: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5260: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5270: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5280: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5290: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
52a0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
52b0: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
52c0: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
52d0: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
52e0: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
52f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5300: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5310: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5320: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5330: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5340: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5350: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5360: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5370: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5380: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5390: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
53a0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
53b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
53c0: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
53d0: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
53e0: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
53f0: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5400: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5410: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5420: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5430: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5440: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5450: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5460: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5470: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5480: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5490: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
54a0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
54b0: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
54c0: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
54d0: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
54e0: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
54f0: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
5500: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
5510: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
5520: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
5530: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
5540: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
5550: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
5560: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
5570: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
5580: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
5590: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
55a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
55b0: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
55c0: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
55d0: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
55e0: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
55f0: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
5600: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
5610: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
5620: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
5630: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
5640: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
5650: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
5660: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
5670: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
5680: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
5690: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
56a0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
56b0: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
56c0: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
56d0: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
56e0: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
56f0: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
5700: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
5710: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
5720: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
5730: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
5740: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
5750: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
5760: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
5770: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
5780: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
5790: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
57a0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
57b0: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
57c0: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
57d0: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
57e0: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
57f0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
5800: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
5810: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
5820: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
5830: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
5840: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
5850: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
5860: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
5870: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
5880: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
5890: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
58a0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
58b0: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
58c0: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
58d0: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
58e0: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
58f0: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
5900: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
5910: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
5920: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
5930: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
5940: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
5950: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
5960: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
5970: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
5980: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
5990: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
59a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
59b0: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
59c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
59d0: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
59e0: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
59f0: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
5a00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5a10: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
5a20: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
5a30: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
5a40: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
5a50: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
5a60: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
5a70: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
5a80: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
5a90: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
5aa0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
5ab0: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
5ac0: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
5ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5ae0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
5af0: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
5b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5b10: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
5b20: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
5b30: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
5b40: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
5b50: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
5b60: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
5b70: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
5b80: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
5b90: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
5ba0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
5bb0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
5bc0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
5bd0: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
5be0: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
5bf0: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
5c00: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
5c10: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
5c20: 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42  SQLITE_RUNTIME_B
5c30: 59 54 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65  YTEORDER=1 is se
5c40: 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64  t, then byte-ord
5c50: 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  er is determined
5c60: 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e  .** at run-time.
5c70: 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64  .*/.#if (defined
5c80: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
5c90: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
5ca0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
5cb0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
5cc0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36     defined(__x86
5cd0: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
5ce0: 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64  __x86_64__) || d
5cf0: 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20  efined(_M_X64)  
5d00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5d10: 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c  ined(_M_AMD64) |
5d20: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d  | defined(_M_ARM
5d30: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
5d40: 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20  (__x86)   ||    
5d50: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5d60: 5f 61 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66  _arm__)) && !def
5d70: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5d80: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
5d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5da0: 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33 34  YTEORDER    1234
5db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5dc0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
5dd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5de0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
5df0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5e00: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5e10: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69  TE_UTF16LE.#endi
5e20: 66 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 73  f.#if (defined(s
5e30: 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69  parc)    || defi
5e40: 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c  ned(__ppc__))  \
5e50: 0a 20 20 20 20 26 26 20 21 64 65 66 69 6e 65 64  .    && !defined
5e60: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
5e70: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5e80: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5e90: 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 64  RDER    4321.# d
5ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
5eb0: 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65  ENDIAN    1.# de
5ec0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5ed0: 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66  LEENDIAN 0.# def
5ee0: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5ef0: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
5f00: 54 46 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69  TF16BE.#endif.#i
5f10: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
5f20: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69  E_BYTEORDER).# i
5f30: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5f40: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
5f50: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
5f60: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
5f70: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
5f80: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
5f90: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
5fa0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5fb0: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5fc0: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5fd0: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5ff0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
6000: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6010: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
6020: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
6030: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
6040: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
6050: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6060: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
6070: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
6080: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
6090: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
60a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
60b0: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
60c0: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
60d0: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
60e0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
60f0: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
6100: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
6110: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
6120: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
6130: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
6140: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
6150: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
6160: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
6170: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
6180: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
6190: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
61a0: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
61b0: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
61c0: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
61d0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
61e0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
61f0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
6200: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
6210: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
6220: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
6230: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
6240: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
6250: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
6260: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
6270: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
6280: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
6290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
62a0: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
62b0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
62c0: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
62d0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
62e0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
62f0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
6300: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
6310: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
6320: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
6330: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
6340: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
6350: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
6360: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
6370: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
6380: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
6390: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
63a0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
63b0: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
63c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
63d0: 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34  ight return us 4
63e0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a  -byte aligned.**
63f0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74   pointers.  In t
6400: 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76  hat case, only v
6410: 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69  erify 4-byte ali
6420: 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65  gnment..*/.#ifde
6430: 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  f SQLITE_4_BYTE_
6440: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23  ALIGNED_MALLOC.#
6450: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
6460: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
6470: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
6480: 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d  - (char*)0)&3)==
6490: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
64a0: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
64b0: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
64c0: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
64d0: 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e  r*)0)&7)==0).#en
64e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  dif../*.** Disab
64f0: 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66  le MMAP on platf
6500: 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73  orms where it is
6510: 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f   known to not wo
6520: 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rk.*/.#if define
6530: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c  d(__OpenBSD__) |
6540: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e  | defined(__QNXN
6550: 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51  TO__).# undef SQ
6560: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6570: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
6580: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6590: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
65a0: 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   Default maximum
65b0: 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20   size of memory 
65c0: 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d  used by memory-m
65d0: 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65  apped I/O in the
65e0: 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f   VFS.*/.#ifdef _
65f0: 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75  _APPLE__.# inclu
6600: 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74  de <TargetCondit
6610: 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66  ionals.h>.#endif
6620: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6630: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6640: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
6650: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
6660: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
6670: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
6680: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
6690: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
66a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
66b0: 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  un) \.  || defin
66c0: 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20  ed(__FreeBSD__) 
66d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
66e0: 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20  _DragonFly__).# 
66f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6700: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78  MAX_MMAP_SIZE 0x
6710: 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34  7fff0000  /* 214
6720: 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73  7418112 */.# els
6730: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6740: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6750: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  E 0.# endif.# de
6760: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6770: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f  MMAP_SIZE_xc 1 /
6780: 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * exclude from c
6790: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
67a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
67b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
67c0: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
67d0: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
67e0: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
67f0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
6800: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
6810: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
6820: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
6830: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
6840: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
6850: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
6860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
6870: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6880: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6890: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
68a0: 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  ZE 0.# define SQ
68b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
68c0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20  P_SIZE_xc 1  /* 
68d0: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
68e0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  me.c */.#endif.#
68f0: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
6900: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
6910: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6920: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6930: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
6940: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6950: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
6960: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
6970: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
6980: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
6990: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
69a0: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
69b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
69c0: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
69d0: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
69e0: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
69f0: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
6a00: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
6a10: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
6a20: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a30: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
6a40: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6a50: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
6a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
6a70: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6a80: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6a90: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6aa0: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6ab0: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
6ac0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
6ad0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
6ae0: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
6af0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6b00: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
6b10: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6b20: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
6b30: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
6b40: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
6b50: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
6b60: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
6b70: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
6b80: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
6b90: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
6ba0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
6bb0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
6bc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
6bd0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
6be0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
6bf0: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
6c00: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
6c10: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
6c20: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
6c30: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
6c40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
6c50: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6c60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6c70: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
6c80: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
6c90: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
6ca0: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
6cb0: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
6cc0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
6cd0: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
6ce0: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
6cf0: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
6d00: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
6d10: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
6d20: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
6d30: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
6d40: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
6d50: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
6d60: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
6d70: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
6d80: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
6d90: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6da0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
6db0: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
6dc0: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
6dd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6de0: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
6df0: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
6e00: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
6e10: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
6e20: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
6e30: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
6e40: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
6e50: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
6e60: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
6e70: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
6e80: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
6eb0: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
6ec0: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
6ed0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
6ee0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6ef0: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
6f00: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
6f10: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
6f20: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
6f30: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
6f40: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
6f50: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
6f60: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
6f70: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
6f80: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
6f90: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
6fa0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
6fb0: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
6fc0: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
6fd0: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
6fe0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6ff0: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7000: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7010: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7020: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7030: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7040: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7050: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7060: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7070: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7080: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
7090: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
70a0: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
70b0: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
70c0: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
70d0: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
70e0: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
70f0: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7100: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7110: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7120: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7130: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
7140: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
7150: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
7160: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
7170: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
7180: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7190: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
71a0: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
71b0: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
71c0: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
71d0: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
71e0: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
71f0: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7200: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7210: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7220: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7230: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
7240: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
7250: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
7260: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
7270: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
7280: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
7290: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
72a0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
72b0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
72c0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
72d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
72e0: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
72f0: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
7300: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
7310: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
7320: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
7330: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
7340: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
7350: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
7360: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
7370: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
7380: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
7390: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
73a0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
73b0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
73c0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
73d0: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
73e0: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
73f0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
7400: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
7410: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
7420: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
7430: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
7440: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
7450: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
7460: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
7470: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
7480: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
7490: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
74a0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
74b0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
74c0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
74d0: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
74e0: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
74f0: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
7500: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
7510: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
7520: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
7530: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
7540: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
7550: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
7560: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
7570: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
7580: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
7590: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
75a0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
75b0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
75c0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
75d0: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
75e0: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
75f0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
7600: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
7610: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
7620: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
7630: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
7640: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
7650: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
7660: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
7670: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
7680: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
7690: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
76a0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
76b0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
76c0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
76d0: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
76e0: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
76f0: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
7700: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
7710: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
7720: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
7730: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
7740: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7750: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
7760: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
7770: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
7780: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
7790: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
77a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
77b0: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
77c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
77d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
77e0: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
77f0: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
7800: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
7810: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
7820: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
7830: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
7840: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
7850: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
7860: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
7870: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
7880: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
7890: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
78a0: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
78b0: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
78c0: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
78d0: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
78e0: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
78f0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
7900: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
7910: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
7920: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
7930: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
7940: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
7950: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
7960: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
7970: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
7980: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
7990: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
79b0: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
79c0: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
79d0: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
79e0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
79f0: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
7a00: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
7a10: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
7a20: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
7a30: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
7a40: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
7a50: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
7a60: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
7a70: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
7a80: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
7a90: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
7aa0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ab0: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
7ac0: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
7ad0: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
7ae0: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
7af0: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
7b00: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
7b10: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
7b20: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
7b30: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
7b40: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
7b50: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
7b60: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
7b70: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
7b80: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
7b90: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
7ba0: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
7bb0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
7bc0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7bd0: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
7be0: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
7bf0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
7c00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
7c10: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
7c20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
7c30: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
7c40: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7c50: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
7c60: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
7c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
7c80: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
7c90: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
7ca0: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
7cb0: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
7cc0: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
7cd0: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
7ce0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7cf0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
7d00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
7d10: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
7d20: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
7d30: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
7d40: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
7d50: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
7d60: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
7d70: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
7d80: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
7d90: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
7da0: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
7db0: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
7dc0: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
7dd0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
7de0: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
7df0: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
7e00: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
7e10: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
7e20: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
7e30: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
7e40: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
7e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
7e60: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
7e70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7e80: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
7e90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ea0: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
7eb0: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
7ec0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
7ed0: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
7ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ef0: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
7f00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
7f10: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
7f20: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
7f30: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
7f40: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7f50: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
7f60: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
7f70: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
7f80: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
7f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7fa0: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
7fb0: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
7fc0: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
7fd0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7fe0: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
7ff0: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8000: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8010: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8020: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8030: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8050: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
8060: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
8070: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
8080: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8090: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
80a0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
80b0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
80c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80d0: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
80e0: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
80f0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8100: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8110: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8120: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8130: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8140: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8150: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8160: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
8170: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
8180: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
8190: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
81a0: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
81b0: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
81c0: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
81d0: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
81e0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
81f0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8200: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8210: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
8220: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
8230: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
8240: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
8250: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
8260: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
8270: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
8280: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
8290: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
82a0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
82b0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
82c0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
82d0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
82e0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
82f0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
8300: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
8310: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
8320: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
8330: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
8340: 0a 0a 2f 2a 20 57 68 65 6e 20 75 73 69 6e 67 20  ../* When using 
8350: 61 20 64 65 66 61 75 6c 74 20 77 61 6c 20 73 61  a default wal sa
8360: 66 65 74 79 20 6c 65 76 65 6c 2c 20 74 68 65 20  fety level, the 
8370: 73 61 66 65 74 79 20 6c 65 76 65 6c 20 73 68 6f  safety level sho
8380: 75 6c 64 20 6f 6e 6c 79 20 0a 2a 2a 20 63 68 61  uld only .** cha
8390: 6e 67 65 20 77 69 74 68 20 74 68 65 20 6a 6f 75  nge with the jou
83a0: 72 6e 61 6c 20 6d 6f 64 65 20 69 66 20 74 68 65  rnal mode if the
83b0: 20 75 73 65 72 20 68 61 73 6e 27 74 20 6d 61 6e   user hasn't man
83c0: 75 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20  ually specified 
83d0: 0a 2a 2a 20 70 72 61 67 6d 61 20 73 79 6e 63 68  .** pragma synch
83e0: 72 6f 6e 6f 75 73 2c 20 69 66 20 74 68 65 79 20  ronous, if they 
83f0: 68 61 76 65 20 74 68 65 20 64 65 66 61 75 6c 74  have the default
8400: 73 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20 61  s shouldn't be a
8410: 70 70 6c 69 65 64 2e 0a 2a 2a 20 54 68 65 20 53  pplied..** The S
8420: 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45  QLITE_SAFETYLEVE
8430: 4c 5f 46 49 58 45 44 20 76 61 6c 75 65 20 69 73  L_FIXED value is
8440: 20 4f 52 65 64 20 69 6e 74 6f 20 74 68 65 20 44   ORed into the D
8450: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a  b->safety_level.
8460: 2a 2a 20 66 69 65 6c 64 20 77 68 65 6e 20 74 68  ** field when th
8470: 65 20 75 73 65 72 20 68 61 73 20 73 70 65 63 69  e user has speci
8480: 66 69 65 64 20 61 20 73 79 6e 63 68 72 6f 6e 6f  fied a synchrono
8490: 75 73 20 73 65 74 74 69 6e 67 20 76 69 61 20 70  us setting via p
84a0: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ragma..*/.#defin
84b0: 65 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c  e SQLITE_SAFETYL
84c0: 45 56 45 4c 5f 46 49 58 45 44 20 30 78 31 30 0a  EVEL_FIXED 0x10.
84d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
84e0: 41 46 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45  AFETYLEVEL_VALUE
84f0: 5f 4d 41 53 4b 20 30 78 30 37 0a 23 64 65 66 69  _MASK 0x07.#defi
8500: 6e 65 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65  ne SQLITE_DbSafe
8510: 74 79 4c 65 76 65 6c 56 61 6c 75 65 28 6c 65 76  tyLevelValue(lev
8520: 65 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49 54  el) (level&SQLIT
8530: 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 56 41  E_SAFETYLEVEL_VA
8540: 4c 55 45 5f 4d 41 53 4b 29 0a 23 64 65 66 69 6e  LUE_MASK).#defin
8550: 65 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74  e SQLITE_DbSafet
8560: 79 4c 65 76 65 6c 49 73 46 69 78 65 64 28 6c 65  yLevelIsFixed(le
8570: 76 65 6c 29 20 28 6c 65 76 65 6c 26 53 51 4c 49  vel) (level&SQLI
8580: 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46  TE_SAFETYLEVEL_F
8590: 49 58 45 44 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  IXED)../*.** Eac
85a0: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
85b0: 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62  to be accessed b
85c0: 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20  y the system is 
85d0: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
85e0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
85f0: 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72  structure.  Ther
8600: 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74  e are normally t
8610: 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  wo of these stru
8620: 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65  ctures.** in the
8630: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72   sqlite.aDb[] ar
8640: 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20  ray.  aDb[0] is 
8650: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
8660: 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44  e file and.** aD
8670: 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61  b[1] is the data
8680: 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
8690: 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79  o hold temporary
86a0: 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69   tables.  Additi
86b0: 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  onal.** database
86c0: 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  s may be attache
86d0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20  d..*/.struct Db 
86e0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
86f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
8700: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
8710: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
8720: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
8730: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
8740: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
8750: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
8760: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
8770: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
8780: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
8790: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
87a0: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
87b0: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
87c0: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
87d0: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
87e0: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
87f0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
8800: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
8810: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
8820: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
8830: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
8840: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
8850: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
8860: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
8870: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
8880: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
8890: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
88a0: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
88b0: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
88c0: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
88d0: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
88e0: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
88f0: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
8900: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
8910: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
8920: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
8930: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
8940: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
8950: 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61  ct..**.** Schema
8960: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
8970: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
8980: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
8990: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
89a0: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
89b0: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
89c0: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
89d0: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
89e0: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
89f0: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
8a00: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
8a10: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
8a20: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
8a30: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
8a40: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
8a50: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
8a60: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
8a70: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
8a80: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
8a90: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
8aa0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
8ab0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
8ac0: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
8ad0: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
8ae0: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
8af0: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
8b00: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
8b10: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
8b20: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
8b30: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
8b40: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
8b50: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
8b60: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
8b70: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
8b80: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
8b90: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
8ba0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
8bb0: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
8bc0: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
8bd0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
8be0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
8bf0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
8c00: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
8c10: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
8c20: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
8c30: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
8c40: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
8c50: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
8c60: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
8c70: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
8c80: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
8c90: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
8ca0: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
8cb0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
8cc0: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
8cd0: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
8ce0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
8cf0: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
8d00: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
8d10: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
8d20: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
8d30: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
8d40: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
8d50: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
8d60: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
8d70: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
8d80: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
8d90: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
8da0: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
8db0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
8dc0: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
8dd0: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
8de0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
8df0: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
8e00: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
8e10: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
8e20: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
8e30: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
8e40: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
8e50: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
8e60: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
8e70: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
8e80: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
8e90: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
8ea0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
8eb0: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
8ec0: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
8ed0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
8ee0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
8ef0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
8f00: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
8f10: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
8f20: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
8f30: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8f40: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
8f50: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
8f60: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
8f70: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
8f80: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
8f90: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
8fa0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8fb0: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
8fc0: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
8fd0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
8fe0: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
8ff0: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
9000: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9010: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
9020: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
9030: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
9040: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
9050: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
9060: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
9070: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
9080: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
9090: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
90a0: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
90b0: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
90c0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
90d0: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
90e0: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
90f0: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
9100: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
9110: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
9120: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
9130: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
9140: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
9150: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
9160: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
9170: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
9180: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
9190: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
91a0: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
91b0: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
91c0: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
91d0: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
91e0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
91f0: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
9200: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
9210: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
9220: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
9230: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
9240: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
9250: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9260: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
9270: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
9280: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
9290: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
92a0: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
92b0: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
92c0: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
92d0: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
92e0: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
92f0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
9300: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
9310: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
9320: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
9330: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
9340: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
9350: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
9360: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
9370: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
9380: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
9390: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
93a0: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
93b0: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
93c0: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
93d0: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
93e0: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
93f0: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
9400: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
9410: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
9420: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
9430: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
9440: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
9450: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
9460: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
9470: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
9480: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
9490: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
94a0: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
94b0: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
94c0: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
94d0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
94e0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
94f0: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
9500: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
9510: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
9520: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
9530: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
9540: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
9550: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
9560: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
9570: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
9580: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
9590: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
95a0: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
95b0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
95c0: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
95d0: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
95e0: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
95f0: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
9600: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
9610: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
9620: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
9630: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
9640: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
9650: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
9660: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
9670: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
9680: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
9690: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
96a0: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
96b0: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
96c0: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
96d0: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
96e0: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
96f0: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
9700: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
9710: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
9720: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
9730: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
9740: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
9750: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
9760: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
9770: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
9780: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9790: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
97a0: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
97b0: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
97c0: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
97d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
97e0: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
97f0: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
9800: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
9810: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
9820: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
9830: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
9840: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9850: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
9860: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
9870: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
9880: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
9890: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
98a0: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
98b0: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
98c0: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
98d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
98e0: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
98f0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
9900: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
9910: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
9920: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
9930: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
9940: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
9950: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
9960: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
9970: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
9980: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
9990: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
99a0: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
99b0: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
99c0: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
99d0: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
99e0: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
99f0: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
9a00: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
9a10: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
9a20: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
9a30: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
9a40: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
9a50: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
9a60: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69   chain..*/.#defi
9a70: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  ne SQLITE_FUNC_H
9a80: 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74  ASH_SZ 23.struct
9a90: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
9aa0: 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49   FuncDef *a[SQLI
9ab0: 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d  TE_FUNC_HASH_SZ]
9ac0: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
9ad0: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
9ae0: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
9af0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
9b00: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
9b10: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
9b20: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
9b30: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
9b40: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
9b50: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
9b60: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
9b70: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
9b80: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
9b90: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
9ba0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
9bb0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
9bc0: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
9bd0: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
9be0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
9bf0: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
9c00: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
9c10: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9c30: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
9c40: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
9c50: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c70: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
9c80: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
9c90: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
9ca0: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
9cb0: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
9cc0: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
9cd0: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
9ce0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
9cf0: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
9d00: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
9d10: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
9d20: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
9d30: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
9d40: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
9d50: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
9d60: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
9d70: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
9d80: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
9d90: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
9da0: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
9db0: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
9dc0: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
9dd0: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
9de0: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
9df0: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
9e00: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
9e10: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
9e20: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
9e30: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
9e40: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
9e50: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
9e60: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
9e70: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
9e80: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
9e90: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
9ea0: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
9eb0: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
9ec0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
9ed0: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
9ee0: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
9ef0: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
9f00: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9f10: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
9f20: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
9f30: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
9f40: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
9f50: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
9f60: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
9f70: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
9f80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
9f90: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
9fa0: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
9fb0: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
9fc0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
9fd0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9fe0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
9ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
a010: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
a020: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
a030: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
a040: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
a050: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
a060: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a070: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
a0a0: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
a0b0: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  f.../*.** Each d
a0c0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a0d0: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
a0e0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
a0f0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
a100: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
a110: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
a120: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
a130: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
a140: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
a150: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
a160: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
a170: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
a180: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
a190: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
a1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
a1b0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
a1c0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
a1d0: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
a1e0: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
a1f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
a200: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
a210: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a230: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
a240: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a260: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a270: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
a280: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
a290: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a2b0: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
a2c0: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
a2d0: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
a2e0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
a2f0: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
a300: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
a310: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
a320: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a340: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
a350: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
a360: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
a370: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
a380: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
a390: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
a3a0: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
a3b0: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
a3c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
a3d0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
a3e0: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
a3f0: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a410: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
a420: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
a430: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
a440: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
a450: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
a460: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
a470: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
a480: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
a490: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a4b0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
a4c0: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
a4d0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
a4e0: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
a4f0: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
a500: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a520: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
a530: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
a540: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
a550: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
a560: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
a570: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
a580: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
a590: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a5b0: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
a5c0: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
a5d0: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
a5e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a5f0: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
a600: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
a610: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
a620: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
a630: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
a640: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
a650: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
a660: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
a670: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
a680: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
a690: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
a6a0: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
a6b0: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
a6c0: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
a6d0: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
a6e0: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
a6f0: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
a700: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
a710: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
a720: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
a730: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
a740: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69  t is a TS */.  i
a750: 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b  nt nextPagesize;
a760: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a770: 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56  Pagesize after V
a780: 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20  ACUUM if >0 */. 
a790: 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20   u32 magic;     
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a7b0: 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66  * Magic number f
a7c0: 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72  or detect librar
a7d0: 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e  y misuse */.  in
a7e0: 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20  t nChange;      
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
a800: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
a810: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
a820: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74  () */.  int nTot
a830: 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20  alChange;       
a840: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
a850: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
a860: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
a870: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d  () */.  int aLim
a880: 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  it[SQLITE_N_LIMI
a890: 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20  T];   /* Limits 
a8a0: 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72  */.  int nMaxSor
a8b0: 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20  terMmap;        
a8c0: 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69     /* Maximum si
a8d0: 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61  ze of regions ma
a8e0: 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a  pped by sorter *
a8f0: 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74  /.  struct sqlit
a900: 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20  e3InitInfo {    
a910: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
a920: 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69   used during ini
a930: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20  tialization */. 
a940: 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20     int newTnum; 
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a960: 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61  * Rootpage of ta
a970: 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ble being initia
a980: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
a990: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
a9a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
a9b0: 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69  h db file is bei
a9c0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
a9d0: 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20  /.    u8 busy;  
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9f0: 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72    /* TRUE if cur
aa00: 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a  rently initializ
aa10: 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72  ing */.    u8 or
aa20: 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20  phanTrigger;    
aa30: 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73         /* Last s
aa40: 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68  tatement is orph
aa50: 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65  aned TEMP trigge
aa60: 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f  r */.    u8 impo
aa70: 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20  sterTable;      
aa80: 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67       /* Building
aa90: 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62   an imposter tab
aaa0: 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a  le */.  } init;.
aab0: 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76    int nVdbeActiv
aac0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
aad0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42  /* Number of VDB
aae0: 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  Es currently run
aaf0: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ning */.  int nV
ab00: 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20  dbeRead;        
ab10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ab20: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
ab30: 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77  s that read or w
ab40: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
ab50: 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20  dbeWrite;       
ab60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ab70: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
ab80: 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20  s that read and 
ab90: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
aba0: 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20  VdbeExec;       
abb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
abc0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
abd0: 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29  ls to VdbeExec()
abe0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74   */.  int nVDest
abf0: 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  roy;            
ac00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ac10: 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74   active OP_VDest
ac20: 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a  roy operations *
ac30: 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69  /.  int nExtensi
ac40: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  on;             
ac50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
ac60: 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73  oaded extensions
ac70: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78   */.  void **aEx
ac80: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
ac90: 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
aca0: 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68  shared library h
acb0: 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64  andles */.  void
acc0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
acd0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
ace0: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
acf0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
ad00: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad20: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ad30: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
ad40: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
ad50: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
ad60: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
ad70: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
ad80: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
ad90: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
ada0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
adc0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
add0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
ade0: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
adf0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ae00: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
ae10: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
ae20: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
ae30: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
ae40: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
ae50: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
ae60: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
ae70: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ae90: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
aea0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
aeb0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
aec0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
aed0: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
aee0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
aef0: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
af00: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
af10: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
af20: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
af30: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
af40: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
af50: 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20  int64);.#ifndef 
af60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
af70: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
af80: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
af90: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
afa0: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
afb0: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
afc0: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
afd0: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
afe0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
aff0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
b000: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
b010: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
b020: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
b030: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
b040: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
b050: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
b060: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
b070: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
b080: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b090: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
b0a0: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
b0b0: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
b0c0: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
b0d0: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
b0e0: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
b0f0: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
b100: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
b110: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
b120: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
b130: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
b140: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
b150: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
b160: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
b170: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b180: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
b190: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75  ON.  sqlite3_xau
b1a0: 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20  th xAuth;       
b1b0: 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74     /* Access aut
b1c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
b1d0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
b1e0: 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20  AuthArg;        
b1f0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
b200: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63  gument to the ac
b210: 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69  cess auth functi
b220: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  on */.#endif.#if
b230: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b240: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
b250: 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  CK.  int (*xProg
b260: 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20  ress)(void *);  
b270: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65     /* The progre
b280: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
b290: 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73   void *pProgress
b2a0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Arg;           /
b2b0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
b2c0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
b2d0: 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ack */.  unsigne
b2e0: 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  d nProgressOps; 
b2f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b300: 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20   of opcodes for 
b310: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
b320: 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  k */.#endif.#ifn
b330: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b340: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
b350: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b370: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
b380: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48  f aVTrans */.  H
b390: 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20  ash aModule;    
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3b0: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c  populated by sql
b3c0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
b3d0: 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74  le() */.  VtabCt
b3e0: 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20  x *pVtabCtx;    
b3f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
b400: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74  xt for active vt
b410: 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74  ab connect/creat
b420: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a  e */.  VTable **
b430: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  aVTrans;        
b440: 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20       /* Virtual 
b450: 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e  tables with open
b460: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f   transactions */
b470: 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63  .  VTable *pDisc
b480: 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69  onnect;    /* Di
b490: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
b4a0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
b4b0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
b4c0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
b4f0: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
b500: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
b510: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
b520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b530: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
b540: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
b550: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
b560: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
b570: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
b580: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b5a0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
b5b0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
b5c0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
b5d0: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
b5e0: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
b5f0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
b600: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
b610: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
b620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
b630: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
b640: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
b650: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
b660: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b670: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
b680: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
b690: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
b6a0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
b6b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b6c0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
b6d0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
b6e0: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
b6f0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
b700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
b710: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
b720: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
b730: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
b740: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
b750: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
b760: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
b770: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
b780: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
b790: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
b7a0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
b7b0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
b7c0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
b7d0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
b7e0: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
b7f0: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
b800: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
b810: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
b820: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
b830: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
b840: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
b850: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
b860: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
b870: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
b880: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
b890: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
b8a0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
b8b0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
b8c0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
b8d0: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
b8e0: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
b8f0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
b900: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
b910: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
b920: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
b930: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
b940: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
b950: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
b960: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
b970: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
b980: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
b990: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
b9a0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
b9b0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
b9c0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
b9d0: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
b9e0: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
b9f0: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
ba00: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
ba10: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
ba20: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
ba30: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
ba40: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba60: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
ba70: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
ba80: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
ba90: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
baa0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
bab0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
bac0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
bad0: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
bae0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
baf0: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
bb00: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
bb10: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
bb20: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
bb30: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
bb40: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
bb50: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
bb60: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
bb70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
bb80: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
bb90: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
bba0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
bbb0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
bbc0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
bbd0: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
bbe0: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
bbf0: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
bc00: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
bc10: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
bc20: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
bc30: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
bc40: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
bc50: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
bc60: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
bc70: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
bc80: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
bc90: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
bca0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
bcb0: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
bcc0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
bcd0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
bce0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
bcf0: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
bd00: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
bd10: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
bd20: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
bd30: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
bd40: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
bd50: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
bd60: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
bd70: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
bd80: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
bd90: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
bda0: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
bdb0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
bdc0: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
bdd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bde0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
bdf0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
be00: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
be10: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
be20: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
be30: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
be40: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
be50: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
be60: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
be70: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
be80: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
be90: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
bea0: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
beb0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bee0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
bef0: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
bf00: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
bf30: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
bf40: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
bf50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
bf60: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
bf70: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
bf80: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
bf90: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
bfd0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
bfe0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
bff0: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
c000: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
c010: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
c020: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
c030: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c040: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
c050: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
c060: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
c070: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
c080: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c090: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
c0a0: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
c0b0: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
c0c0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
c0d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
c0e0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
c0f0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
c100: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
c110: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
c120: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
c130: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
c140: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
c150: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
c160: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
c170: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
c180: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
c190: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
c1a0: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
c1b0: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
c1c0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
c1d0: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
c1e0: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
c1f0: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
c200: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
c210: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
c220: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
c230: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
c240: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
c250: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
c260: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
c270: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
c280: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
c290: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
c2a0: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
c2b0: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
c2c0: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
c2d0: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
c2e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c2f0: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
c300: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
c310: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
c320: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
c330: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c340: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
c350: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
c360: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
c370: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
c380: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
c390: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
c3a0: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
c3b0: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
c3c0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
c3d0: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
c3e0: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
c3f0: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
c400: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
c410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
c420: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
c430: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
c440: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
c450: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c460: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
c470: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
c480: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
c490: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
c4a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
c4b0: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
c4c0: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
c4d0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
c4e0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
c4f0: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
c500: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
c510: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
c520: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
c530: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
c540: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
c550: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  08000000  /* Cur
c560: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
c570: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
c580: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
c590: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
c5a0: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
c5b0: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
c5c0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c5d0: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
c5e0: 72 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f  r  0x20000000  /
c5f0: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
c600: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 0a 0a  kenizer(2) */...
c610: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
c620: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
c630: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
c640: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
c650: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
c660: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
c670: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
c680: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
c690: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
c6a0: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
c6b0: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
c6c0: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
c6d0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
c6e0: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
c6f0: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
c700: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
c710: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
c720: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
c730: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
c740: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c750: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
c760: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
c770: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
c780: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
c790: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
c7a0: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
c7b0: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
c7c0: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
c7d0: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
c7e0: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
c7f0: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
c800: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
c810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
c820: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
c830: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
c840: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
c850: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c860: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
c870: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
c880: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
c890: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c8a0: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
c8b0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
c8c0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
c8d0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
c8e0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
c8f0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
c900: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
c910: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
c920: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
c930: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
c940: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
c950: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
c960: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
c970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
c980: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
c990: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
c9a0: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
c9b0: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
c9c0: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
c9d0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
c9e0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
c9f0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
ca00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
ca10: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30 30  orHints    0x200
ca20: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
ca30: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
ca40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ca50: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
ca60: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
ca70: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
ca80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
ca90: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
caa0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
cab0: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
cac0: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
cad0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
cae0: 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
caf0: 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f  N_TEST.#define O
cb00: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
cb10: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
cb20: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
cb30: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
cb40: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
cb50: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
cb60: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
cb70: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
cb80: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69  ==0).#else.#defi
cb90: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
cba0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
cbb0: 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74  )  0.#define Opt
cbc0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
cbd0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23  (db, mask)   1.#
cbe0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
cbf0: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
cc00: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
cc10: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
cc20: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
cc30: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
cc40: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
cc50: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
cc60: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
cc70: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
cc80: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
cc90: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
cca0: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
ccb0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
ccc0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
ccd0: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
cce0: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
ccf0: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
cd00: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
cd10: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
cd20: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
cd30: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
cd40: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
cd50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cd60: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
cd70: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
cd80: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
cd90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cda0: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
cdb0: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
cdc0: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
cdd0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
cde0: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
cdf0: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
ce00: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
ce10: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
ce20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ce30: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
ce40: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
ce50: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
ce60: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
ce70: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
ce80: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
ce90: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
cea0: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
ceb0: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
cec0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
ced0: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
cee0: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
cef0: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
cf00: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
cf10: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
cf20: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
cf30: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
cf40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
cf50: 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
cf60: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20  global built-in 
cf70: 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73  functions (ex: s
cf80: 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20  ubstr(), max(), 
cf90: 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f  count()).** a po
cfa0: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
cfb0: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
cfc0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75  in the sqlite3Bu
cfd0: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f  iltinFunctions o
cfe0: 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65  bject..** For pe
cff0: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
d000: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
d010: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f   functions, a po
d020: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a  inter to this.**
d030: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
d040: 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48  ld in the db->aH
d050: 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  ash hash table..
d060: 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73  **.** The u.pHas
d070: 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  h field is used 
d080: 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75  by the global bu
d090: 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e  ilt-ins.  The u.
d0a0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66  pDestructor.** f
d0b0: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
d0c0: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
d0d0: 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73  pp-def functions
d0e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
d0f0: 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b  Def {.  i8 nArg;
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d110: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
d120: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
d130: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
d140: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
d150: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
d160: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
d170: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
d180: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
d190: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
d1a0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
d1b0: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
d1c0: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
d1d0: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
d1e0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
d1f0: 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  SFunc)(sqlite3_c
d200: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
d210: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
d220: 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65   func or agg-ste
d230: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
d240: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
d250: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d270: 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  Agg finalizer */
d280: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
d290: 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e  Name;   /* SQL n
d2a0: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
d2b0: 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ion. */.  union 
d2c0: 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  {.    FuncDef *p
d2d0: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
d2e0: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
d2f0: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
d300: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
d310: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
d320: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
d330: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
d340: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
d350: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d   function */.  }
d360: 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   u;.};../*.** Th
d370: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
d380: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
d390: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
d3a0: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
d3b0: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
d3c0: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
d3d0: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
d3e0: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
d3f0: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
d400: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
d410: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
d420: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
d430: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
d440: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
d450: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
d460: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
d470: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
d480: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a  .nRef is set to.
d490: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
d4a0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
d4b0: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
d4c0: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
d4d0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
d4e0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
d4f0: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
d500: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
d510: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
d520: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
d530: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
d540: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
d550: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
d560: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
d570: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
d580: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
d590: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
d5a0: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
d5b0: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
d5c0: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
d5d0: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
d5e0: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
d5f0: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
d600: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
d610: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
d620: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
d630: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
d640: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
d650: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
d660: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
d670: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
d680: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
d690: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
d6a0: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
d6b0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
d6c0: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
d6d0: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
d6e0: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
d6f0: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
d700: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
d710: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
d720: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
d730: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41  AG_TYPEOFARG.  A
d740: 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
d750: 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20  C_CONSTANT must 
d760: 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53  be the same as S
d770: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
d780: 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  TIC.  There.** a
d790: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
d7a0: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
d7b0: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
d7c0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
d7d0: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
d7e0: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
d7f0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
d800: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
d810: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
d820: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
d830: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
d840: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
d850: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
d860: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d870: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
d880: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
d890: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
d8a0: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
d8b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d8c0: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
d8d0: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
d8e0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
d8f0: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
d900: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
d910: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
d920: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
d930: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
d940: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
d950: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
d960: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
d970: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
d980: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
d990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d9a0: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
d9b0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
d9c0: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
d9d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d9e0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
d9f0: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
da00: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
da10: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
da20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
da30: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
da40: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
da50: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
da60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da70: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
da80: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
da90: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
daa0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
dab0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
dac0: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
dad0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
dae0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
daf0: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
db00: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
db10: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
db20: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
db30: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
db40: 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
db50: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
db60: 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
db70: 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
db80: 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
db90: 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
dbc0: 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
dbd0: 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
dbe0: 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ime */../*.** Th
dbf0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
dc00: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
dc10: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
dc20: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
dc30: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
dc40: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
dc50: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
dc60: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
dc70: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
dc80: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
dc90: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
dca0: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
dcb0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
dcc0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
dcd0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
dce0: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
dcf0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
dd00: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
dd10: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
dd20: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
dd30: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
dd40: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
dd50: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
dd60: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
dd70: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
dd80: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
dd90: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
dda0: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
ddb0: 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20  ction. If.**    
ddc0: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
ddd0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
dde0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ddf0: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
de00: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
de10: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
de20: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
de30: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
de40: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
de50: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
de60: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
de70: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44   flag..**.**   D
de80: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
de90: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
dea0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
deb0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
dec0: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
ded0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
dee0: 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a  STANT flag and.*
def0: 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53  *     adds the S
df00: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
df10: 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66  NG flag.  Used f
df20: 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66  or date & time f
df30: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20  unctions.**     
df40: 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69  and functions li
df50: 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  ke sqlite_versio
df60: 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61  n() that can cha
df70: 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72  nge, but not dur
df80: 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e  ing.**     a sin
df90: 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  gle query..**.**
dfa0: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
dfb0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
dfc0: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
dfd0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
dfe0: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
dff0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
e000: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
e010: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
e020: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
e030: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
e040: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
e050: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
e060: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
e070: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
e080: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
e090: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
e0a0: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
e0b0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
e0c0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
e0d0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
e0e0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
e0f0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
e100: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
e110: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
e120: 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61  zName.**     tha
e130: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
e140: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
e150: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
e160: 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20   call to C.**   
e170: 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
e180: 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
e190: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
e1a0: 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
e1b0: 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
e1c0: 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
e1d0: 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
e1e0: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
e1f0: 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
e200: 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
e210: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
e220: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
e230: 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
e240: 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
e250: 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
e260: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
e270: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
e280: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
e290: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
e2a0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
e2b0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
e2c0: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
e2d0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e2e0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
e2f0: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
e300: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e  } }.#define VFUN
e310: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
e320: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
e330: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
e340: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
e350: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
e360: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
e370: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
e380: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
e390: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
e3a0: 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49  .#define DFUNCTI
e3b0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
e3c0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
e3d0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
e3e0: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
e3f0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
e400: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
e410: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
e420: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
e430: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
e440: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
e450: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
e460: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
e470: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
e480: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
e490: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
e4a0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
e4b0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
e4c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
e4d0: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
e4e0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
e4f0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
e500: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
e510: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
e520: 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
e530: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
e540: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
e550: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
e560: 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
e570: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
e580: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
e590: 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
e5a0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
e5b0: 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49  me, }.#define LI
e5c0: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
e5d0: 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
e5e0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
e5f0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
e600: 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
e610: 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
e620: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
e630: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
e640: 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45   }.#define AGGRE
e650: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
e660: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
e670: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
e680: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
e690: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
e6a0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
e6b0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
e6c0: 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
e6d0: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
e6e0: 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47   {0}}.#define AG
e6f0: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
e700: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
e710: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
e720: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
e730: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
e740: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
e750: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
e760: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
e770: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
e780: 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
e790: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  nal,#zName, {0}}
e7a0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
e7b0: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
e7c0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
e7d0: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
e7e0: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
e7f0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
e800: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
e810: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
e820: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
e830: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
e840: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
e850: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
e860: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
e870: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
e880: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
e890: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
e8a0: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
e8b0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
e8d0: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
e8e0: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
e8f0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
e900: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
e910: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e920: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
e930: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
e940: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
e950: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
e960: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e970: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
e980: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
e990: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e9b0: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
e9c0: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
e9d0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
e9e0: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
e9f0: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
ea00: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
ea10: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
ea20: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
ea30: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
ea40: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
ea50: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
ea60: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
ea70: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
ea80: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
ea90: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
eaa0: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
eab0: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
eac0: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
ead0: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
eae0: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
eaf0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
eb00: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
eb10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
eb20: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
eb30: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
eb40: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
eb50: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
eb60: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
eb70: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
eb80: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
eb90: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
eba0: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
ebb0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ebd0: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
ebe0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
ebf0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec10: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
ec20: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
ec30: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
ec40: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
ec50: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
ec60: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
ec70: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
ec80: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
ec90: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
ecb0: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
ecc0: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
ecd0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
ece0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
ecf0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
ed00: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
ed10: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
ed20: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
ed30: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
ed40: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
ed50: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
ed60: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
ed70: 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20  umn, \000, then 
ed80: 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78  the type */.  Ex
ed90: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
eda0: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
edb0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
edc0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
edd0: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
ede0: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
edf0: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
ee00: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
ee10: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
ee20: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
ee30: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
ee40: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
ee50: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
ee60: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
ee70: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
ee80: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
ee90: 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
eea0: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
eeb0: 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73  of value in this
eec0: 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28   column. sizeof(
eed0: 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20  INT)==1 */.  u8 
eee0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
eef0: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
ef00: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
ef10: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
ef20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
ef30: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
ef40: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
ef50: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
ef60: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
ef70: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
ef80: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
ef90: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
efa0: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
efb0: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
efc0: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
efd0: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
efe0: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
eff0: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
f000: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
f010: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
f020: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
f030: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
f040: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
f050: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
f060: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
f070: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
f080: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
f090: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
f0a0: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
f0b0: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
f0c0: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
f0d0: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
f0e0: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
f0f0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
f100: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
f110: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
f120: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
f130: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
f140: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
f150: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
f160: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
f170: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
f180: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
f190: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
f1a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
f1b0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
f1c0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
f1d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
f1e0: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
f1f0: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
f200: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
f210: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
f220: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
f230: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
f240: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
f250: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
f260: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
f270: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
f280: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
f290: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
f2a0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
f2b0: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
f2c0: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
f2d0: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
f2e0: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
f2f0: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
f300: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
f310: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f320: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
f330: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
f340: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
f350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f360: 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
f370: 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
f380: 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
f390: 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
f3a0: 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
f3b0: 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
f3c0: 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
f3d0: 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
f3e0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
f3f0: 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
f400: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
f410: 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
f420: 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
f430: 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
f440: 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
f450: 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
f460: 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
f470: 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
f480: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
f490: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
f4a0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
f4b0: 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
f4c0: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
f4d0: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
f4e0: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
f4f0: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
f500: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
f510: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
f520: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
f530: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
f540: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
f550: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
f560: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
f570: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
f580: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
f590: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
f5a0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
f5b0: 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
f5c0: 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
f5d0: 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
f5e0: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
f5f0: 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
f600: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
f610: 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
f620: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f630: 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
f640: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
f650: 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
f660: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
f670: 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
f680: 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
f690: 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
f6a0: 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
f6b0: 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
f6c0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
f6d0: 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
f6e0: 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
f6f0: 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
f700: 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
f710: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f720: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
f730: 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
f740: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
f750: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
f760: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
f770: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
f780: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
f790: 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
f7a0: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
f7b0: 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
f7c0: 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
f7d0: 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
f7e0: 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
f7f0: 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
f800: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
f810: 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
f820: 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
f830: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
f840: 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
f850: 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
f860: 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
f870: 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
f880: 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
f890: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
f8a0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f8b0: 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
f8c0: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
f8d0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
f8e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f8f0: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
f900: 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
f910: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
f920: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
f930: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f940: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
f950: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
f960: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
f970: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
f980: 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
f990: 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
f9a0: 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
f9b0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
f9c0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
f9d0: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
f9e0: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
f9f0: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
fa00: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
fa10: 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
fa20: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
fa30: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
fa40: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
fa50: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
fa60: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
fa70: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
fa80: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
fa90: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
faa0: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
fab0: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
fac0: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
fad0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
fae0: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
faf0: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
fb00: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
fb10: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
fb20: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
fb30: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a  virtual table.**
fb40: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
fb50: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
fb60: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
fb70: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
fb80: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
fb90: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
fba0: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
fbb0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
fbc0: 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61  tabase.** schema
fbd0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
fbe0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
fbf0: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
fc00: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
fc10: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
fc20: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
fc30: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
fc40: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
fc50: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
fc60: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
fc70: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
fc80: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
fc90: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
fca0: 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
fcb0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
fcc0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
fcd0: 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
fce0: 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69   tables.** withi
fcf0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
fd00: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
fd10: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
fd20: 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72  he callers.** tr
fd30: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
fd40: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
fd50: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
fd60: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a  e same database.
fd70: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
fd80: 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
fd90: 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
fda0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
fdb0: 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
fdc0: 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
fdd0: 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
fde0: 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
fdf0: 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
fe00: 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
fe10: 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
fe20: 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
fe30: 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
fe40: 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
fe50: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
fe60: 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
fe70: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
fe80: 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
fe90: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
fea0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
feb0: 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
fec0: 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
fed0: 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
fee0: 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
fef0: 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
ff00: 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
ff10: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
ff20: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
ff30: 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
ff40: 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
ff50: 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
ff60: 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
ff70: 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
ff80: 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
ff90: 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
ffa0: 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
ffb0: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
ffc0: 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
ffd0: 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
ffe0: 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
fff0: 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
10000 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
10010 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
10020 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64  t.** deleted and
10030 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
10040 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
10050 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
10060 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ed.** immediatel
10070 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
10080 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
10090 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
100a0 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
100b0 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
100c0 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
100d0 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
100e0 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
100f0 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
10100 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
10110 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
10120 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
10130 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74  onnected.** next
10140 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
10150 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
10160 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
10170 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
10180 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
10190 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
101a0 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
101b0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
101c0 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
101d0 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
101e0 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
101f0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
10200 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
10210 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
10220 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
10230 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
10240 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
10250 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
10260 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
10270 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
10280 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
10290 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
102a0 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
102b0 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
102c0 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
102d0 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ted by.** sqlite
102e0 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
102f0 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
10300 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
10310 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a  in VTable.db as.
10320 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
10330 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
10340 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
10350 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
10360 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
10370 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
10380 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
10390 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
103a0 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
103b0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
103c0 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
103d0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
103e0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
103f0 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
10400 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
10410 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
10420 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
10430 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10440 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
10450 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
10460 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
10470 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
10480 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
10490 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
104a0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
104b0 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
104c0 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
104d0 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
104e0 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
104f0 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
10500 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
10510 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
10520 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
10530 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
10540 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64  ch SQL table and
10550 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65   view is represe
10560 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
10570 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  * by an instance
10580 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10590 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
105a0 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
105b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
105c0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
105d0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
105e0 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
105f0 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
10600 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
10610 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
10620 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
10630 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
10640 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
10650 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
10660 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
10670 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
10680 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
10690 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
106a0 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
106b0 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
106c0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
106d0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
106e0 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
106f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
10700 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
10710 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
10720 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
10730 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
10740 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
10750 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
10760 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
10770 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nts */.         
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10790 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64     ... also used
107a0 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20   as column name 
107b0 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a  list in a VIEW *
107c0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
107d0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
107e0 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
107f0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
10800 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
10810 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
10820 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
10830 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
10840 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
10850 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
10860 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10870 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
10880 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
10890 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
108a0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
108b0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
108c0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f   */.  LogEst nRo
108d0 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73  wLogEst;   /* Es
108e0 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
108f0 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
10900 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
10910 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
10920 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
10930 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
10940 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
10950 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66   bytes */.#ifdef
10960 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
10970 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74  OSTMULT.  LogEst
10980 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f   costMult;     /
10990 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65  * Cost multiplie
109a0 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73  r for using this
109b0 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
109c0 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
109d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
109e0 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
109f0 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
10a00 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
10a10 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
10a20 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
10a30 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
10a40 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
10a50 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
10a60 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
10a70 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
10a80 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
10a90 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
10aa0 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
10ab0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
10ac0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
10ad0 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
10ae0 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
10af0 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
10b00 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
10b10 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
10b20 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30  ModuleArg;  /* 0
10b30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65  : module 1: sche
10b40 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20  ma 2: vtab name 
10b50 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20  3...: args */.  
10b60 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
10b70 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
10b80 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
10b90 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
10ba0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
10bb0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
10bc0 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
10bd0 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
10be0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
10bf0 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
10c00 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
10c10 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
10c20 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
10c30 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
10c40 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
10c50 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
10c60 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
10c70 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
10c80 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
10c90 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
10ca0 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20   tables or view 
10cb0 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
10cc0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
10cd0 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
10ce0 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
10cf0 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
10d00 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
10d10 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
10d20 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
10d30 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
10d40 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
10d50 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
10d60 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
10d70 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
10d80 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
10d90 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
10da0 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
10db0 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
10dc0 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
10dd0 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
10de0 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
10df0 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
10e00 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
10e10 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
10e20 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10e30 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
10e40 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
10e50 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
10e60 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
10e70 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
10e80 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
10e90 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
10ea0 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
10eb0 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
10ec0 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
10ed0 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
10ee0 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
10ef0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
10f00 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
10f10 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
10f20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
10f30 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
10f40 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30  outRowid    0x20
10f50 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
10f60 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
10f70 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
10f80 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
10f90 52 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f  Rowid  0x40    /
10fa0 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
10fb0 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
10fc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
10fd0 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
10fe0 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  x80    /* Out-of
10ff0 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
11000 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  lumns */.../*.**
11010 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
11020 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
11030 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
11040 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
11050 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
11060 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
11070 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
11080 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
11090 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
110a0 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
110b0 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
110c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
110d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
110e0 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
110f0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
11100 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
11110 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
11120 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
11130 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
11140 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
11150 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
11160 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
11170 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
11180 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
11190 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
111a0 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
111b0 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
111c0 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
111d0 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
111e0 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
111f0 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
11200 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
11210 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
11220 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
11230 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
11240 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
11250 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
11260 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
11270 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
11280 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
11290 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
112a0 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
112b0 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
112c0 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
112d0 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
112e0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
112f0 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
11300 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
11310 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
11320 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
11330 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
11340 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
11350 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
11360 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
11370 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
11380 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
11390 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
113a0 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
113b0 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
113c0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
113d0 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
113e0 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
113f0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
11400 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
11410 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
11420 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
11430 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
11440 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
11450 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
11460 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
11470 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
11480 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
11490 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
114a0 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
114b0 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
114c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
114d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
114e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
114f0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
11500 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
11510 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
11520 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
11530 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
11540 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
11550 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
11560 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
11570 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
11580 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
11590 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
115a0 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
115b0 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
115c0 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
115d0 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
115e0 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
115f0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
11600 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
11610 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
11620 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
11630 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
11640 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
11650 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
11660 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
11670 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
11680 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
11690 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
116a0 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
116b0 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
116c0 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
116d0 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
116e0 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
116f0 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
11700 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
11710 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
11720 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
11730 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
11740 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11750 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11760 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
11770 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
11780 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
11790 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
117a0 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
117b0 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
117c0 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
117d0 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
117e0 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
117f0 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
11800 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
11810 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
11820 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
11830 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
11840 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
11850 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
11860 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
11870 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
11880 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
11890 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
118a0 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
118b0 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
118c0 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
118d0 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
118e0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
118f0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
11900 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
11910 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
11920 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
11930 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
11940 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
11950 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
11960 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
11970 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
11980 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11990 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
119a0 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
119b0 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
119c0 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
119d0 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
119e0 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
119f0 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
11a00 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
11a10 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
11a20 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
11a30 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
11a40 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
11a50 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11a60 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
11a70 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
11a80 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
11a90 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
11aa0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
11ab0 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
11ac0 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
11ad0 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
11ae0 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
11af0 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
11b00 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
11b10 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
11b20 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
11b30 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
11b40 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
11b50 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
11b60 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
11b70 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
11b80 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
11b90 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
11ba0 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
11bb0 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
11bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
11bd0 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
11be0 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
11bf0 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
11c00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
11c10 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
11c20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
11c30 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
11c40 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
11c50 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
11c60 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
11c70 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
11c80 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
11c90 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
11ca0 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
11cb0 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
11cc0 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
11cd0 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
11ce0 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
11cf0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
11d00 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
11d10 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
11d20 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
11d30 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
11d40 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
11d50 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
11d60 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
11d70 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
11d80 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
11d90 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
11da0 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
11db0 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
11dc0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
11dd0 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
11de0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
11df0 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
11e00 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
11e10 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
11e20 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
11e30 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
11e40 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
11e50 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
11e60 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
11e70 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
11e80 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
11e90 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
11ea0 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
11eb0 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
11ec0 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
11ed0 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
11ee0 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
11ef0 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
11f00 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
11f10 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
11f20 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
11f30 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
11f40 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
11f50 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
11f60 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
11f70 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
11f80 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
11f90 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
11fa0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
11fb0 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
11fc0 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
11fd0 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
11fe0 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
11ff0 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
12000 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
12010 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
12020 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
12030 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
12040 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
12050 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
12060 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
12070 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
12080 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
12090 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
120a0 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
120b0 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
120c0 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
120d0 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
120e0 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
120f0 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
12100 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
12110 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
12120 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
12130 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
12140 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
12150 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
12160 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
12170 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
12180 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
12190 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
121a0 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
121b0 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
121c0 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
121d0 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
121e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
121f0 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
12200 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
12210 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
12220 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
12230 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
12240 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
12250 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
12260 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
12270 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
12280 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
12290 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
122a0 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
122b0 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
122c0 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
122d0 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
122e0 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
122f0 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
12300 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
12310 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
12320 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
12330 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
12340 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
12350 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
12360 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
12370 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
12380 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
12390 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
123a0 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
123b0 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
123c0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
123d0 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
123e0 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
123f0 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
12400 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
12410 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
12420 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
12430 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
12440 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
12450 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
12460 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
12470 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
12480 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
12490 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
124a0 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
124b0 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
124c0 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
124d0 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
124e0 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
124f0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
12500 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
12510 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
12520 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
12530 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
12540 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
12550 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
12560 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
12570 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
12580 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
12590 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
125a0 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
125b0 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
125c0 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
125d0 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
125e0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
125f0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
12600 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
12610 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
12620 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
12630 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
12640 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
12650 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
12660 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
12670 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
12680 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
12690 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
126a0 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
126b0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
126c0 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
126d0 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
126e0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
126f0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
12700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
12710 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
12720 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
12730 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
12740 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12750 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
12760 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
12770 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
12780 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
12790 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
127a0 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
127b0 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
127c0 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
127d0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
127e0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
127f0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
12800 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
12810 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
12820 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
12830 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
12840 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
12850 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
12860 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
12870 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
12880 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
12890 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
128a0 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
128b0 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
128c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
128d0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
128e0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
128f0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
12900 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
12910 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
12920 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
12930 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
12940 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
12950 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
12960 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
12970 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
12980 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
12990 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
129a0 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
129b0 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
129c0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
129d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
129e0 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
129f0 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
12a00 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
12a10 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
12a20 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
12a30 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
12a40 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
12a50 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
12a60 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
12a70 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
12a80 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
12a90 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
12aa0 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
12ab0 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
12ac0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
12ad0 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
12ae0 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
12af0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
12b00 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
12b10 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
12b20 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
12b30 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
12b40 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
12b50 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
12b60 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
12b70 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
12b80 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
12b90 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
12ba0 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
12bb0 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
12bc0 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
12bd0 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
12be0 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
12bf0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
12c00 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
12c10 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
12c20 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
12c30 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
12c40 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
12c50 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
12c60 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
12c70 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
12c80 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
12c90 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
12ca0 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
12cb0 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
12cc0 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
12cd0 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
12ce0 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
12cf0 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
12d00 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
12d10 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
12d20 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
12d30 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
12d40 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
12d50 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
12d60 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
12d70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
12d80 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
12d90 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
12da0 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
12db0 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
12dc0 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
12dd0 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
12de0 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
12df0 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
12e00 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
12e10 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
12e20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
12e30 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
12e40 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
12e50 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
12e60 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
12e70 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
12e80 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
12e90 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
12ea0 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
12eb0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
12ec0 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
12ed0 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
12ee0 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
12ef0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
12f00 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
12f10 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
12f20 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
12f30 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
12f40 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
12f50 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
12f60 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
12f70 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
12f80 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
12f90 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
12fa0 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
12fb0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
12fc0 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
12fd0 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
12fe0 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
12ff0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
13000 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
13010 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
13020 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
13030 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
13040 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
13050 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
13060 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  > rhs) */.  i8 r
13070 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
13080 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
13090 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
130a0 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
130b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
130c0 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
130d0 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
130e0 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
130f0 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
13100 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
13110 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
13120 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
13130 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13140 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
13150 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
13160 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
13170 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
13180 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
13190 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
131a0 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
131b0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
131c0 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
131d0 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
131e0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
131f0 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
13200 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
13210 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
13220 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
13230 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
13240 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
13250 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
13260 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
13270 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
13280 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
13290 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
132a0 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
132b0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
132c0 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
132d0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
132e0 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
132f0 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
13300 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
13310 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
13320 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
13330 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
13340 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
13350 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
13360 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
13370 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
13380 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
13390 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
133a0 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
133b0 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
133c0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
133d0 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
133e0 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
133f0 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
13400 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
13410 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
13420 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
13430 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
13440 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
13450 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
13460 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
13470 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
13480 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
13490 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
134a0 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
134b0 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
134c0 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
134d0 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
134e0 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
134f0 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
13500 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
13510 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
13520 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
13530 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
13540 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
13550 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
13560 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
13570 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
13580 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
13590 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
135a0 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
135b0 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
135c0 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
135d0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
135e0 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
135f0 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
13600 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
13610 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
13620 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
13630 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
13640 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
13650 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
13660 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
13670 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
13680 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
13690 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
136a0 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
136b0 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
136c0 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
136d0 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
136e0 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
136f0 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
13700 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
13710 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
13720 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
13730 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
13740 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
13750 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
13760 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
13770 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
13780 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
13790 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
137a0 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
137b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
137c0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
137d0 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
137e0 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
137f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
13800 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
13810 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
13820 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
13830 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
13840 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
13850 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
13860 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
13870 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
13880 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
13890 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
138a0 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
138b0 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
138c0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
138d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
138e0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
138f0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
13900 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
13910 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
13920 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
13930 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
13940 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
13950 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
13960 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
13970 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
13980 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
13990 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
139a0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
139b0 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
139c0 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
139d0 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
139e0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
139f0 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
13a00 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
13a10 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
13a20 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
13a30 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
13a40 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
13a50 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
13a60 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
13a70 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
13a80 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
13a90 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
13aa0 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
13ad0 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
13ae0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
13af0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
13b00 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
13b10 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
13b20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
13b30 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
13b40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13b50 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13b60 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
13b70 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
13b80 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
13b90 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13ba0 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
13bb0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
13bc0 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
13bd0 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
13be0 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
13bf0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
13c00 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
13c10 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
13c20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
13c30 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
13c40 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
13c50 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
13c60 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
13c70 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
13c80 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
13c90 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
13ca0 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
13cb0 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
13cc0 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
13cd0 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
13ce0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
13cf0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
13d00 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
13d10 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
13d20 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
13d30 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
13d40 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
13d50 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
13d60 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
13d70 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
13d80 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
13d90 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
13da0 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
13db0 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
13dc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13dd0 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
13de0 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
13df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13e00 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
13e10 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
13e20 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
13e30 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
13e40 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
13e50 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
13e60 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
13e70 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
13e80 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
13e90 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
13ea0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
13eb0 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
13ec0 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
13ed0 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
13ee0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
13ef0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
13f00 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
13f10 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
13f20 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
13f30 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
13f40 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
13f50 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
13f60 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
13f70 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
13f80 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
13f90 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
13fa0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
13fb0 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
13fc0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
13fd0 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
13fe0 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
13ff0 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
14000 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
14010 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
14020 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
14030 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
14040 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
14050 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
14060 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
14070 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
14080 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
14090 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
140a0 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
140b0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
140c0 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
140d0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
140e0 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
140f0 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
14100 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
14110 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
14120 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
14130 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
14140 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
14150 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
14160 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
14170 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
14180 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e  None)../* The In
14190 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76  dex.aiColumn[] v
141a0 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c  alues are normal
141b0 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ly positive inte
141c0 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65  ger.  But.** the
141d0 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61  re are some nega
141e0 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74  tive values that
141f0 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65   have special me
14200 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e  aning:.*/.#defin
14210 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28  e XN_ROWID     (
14220 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -1)     /* Index
14230 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ed column is the
14240 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
14250 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28  e XN_EXPR      (
14260 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -2)     /* Index
14270 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  ed column is an 
14280 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f  expression */../
14290 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
142a0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
142b0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
142c0 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
142d0 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73   in memory.** us
142e0 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
142f0 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
14300 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
14310 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
14320 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
14330 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
14340 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
14350 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
14360 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
14370 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
14380 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
14390 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
143a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
143b0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
143c0 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
143d0 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
143e0 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
143f0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
14400 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
14410 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
14420 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
14430 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
14440 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
14450 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
14460 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
14470 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
14480 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
14490 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
144a0 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
144b0 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
144c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
144d0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
144e0 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
144f0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
14500 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
14510 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
14520 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
14530 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
14540 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
14550 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
14560 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
14570 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
14580 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
14590 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
145a0 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
145b0 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
145c0 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
145d0 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
145e0 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
145f0 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
14600 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
14610 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
14620 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
14630 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
14640 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
14650 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
14660 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
14670 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
14680 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
14690 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
146a0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
146b0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
146c0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
146d0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
146e0 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
146f0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
14700 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
14710 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
14720 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
14730 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
14740 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
14750 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
14760 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
14770 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
14780 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
14790 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
147a0 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
147b0 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
147c0 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
147d0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
147e0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
147f0 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
14800 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
14810 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
14820 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
14830 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
14840 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
14850 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
14860 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
14870 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
14880 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
14890 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
148a0 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
148b0 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
148c0 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
148d0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
148e0 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
148f0 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
14900 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
14910 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
14920 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
14930 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
14960 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
14970 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
14980 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
14990 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
149a0 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
149b0 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
149c0 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
149d0 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
14a00 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
14a10 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
14a20 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
14a30 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
14a40 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
14a50 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
14a60 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
14a70 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
14a80 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
14a90 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
14aa0 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
14ab0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
14ac0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
14ad0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
14ae0 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
14af0 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
14b00 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
14b10 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
14b20 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
14b30 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
14b40 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
14b50 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
14b60 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
14b70 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
14b80 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
14b90 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
14ba0 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
14bb0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
14bc0 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
14bd0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
14be0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
14bf0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
14c00 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
14c10 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
14c20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
14c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
14c40 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
14c50 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
14c60 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
14c70 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
14c80 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
14c90 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
14ca0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
14cb0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
14cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
14cd0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
14ce0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
14cf0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
14d00 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
14d10 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
14d20 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
14d30 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
14d40 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
14d50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14d60 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
14d70 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
14d80 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
14d90 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
14da0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
14db0 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
14dc0 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
14df0 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
14e00 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
14e10 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e30 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
14e40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
14e50 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
14e60 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
14e70 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
14e80 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
14e90 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
14ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
14eb0 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
14ec0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
14ed0 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
14ee0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
14ef0 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
14f00 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
14f10 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
14f20 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
14f30 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
14f40 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
14f50 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
14f60 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
14f70 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
14f80 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
14f90 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
14fa0 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
14fb0 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
14fc0 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
14fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14fe0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
14ff0 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
15000 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
15010 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
15020 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
15030 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
15040 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
15050 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
15060 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
15070 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
15080 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
15090 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
150a0 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
150b0 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
150c0 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
150d0 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
150e0 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
150f0 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
15100 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
15110 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
15120 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
15130 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
15140 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
15150 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
15160 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
15170 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
15180 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
15190 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
151a0 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
151b0 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
151c0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
151d0 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
151e0 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
151f0 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
15200 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
15210 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
15220 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
15230 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
15240 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
15250 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
15260 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
15270 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
15280 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
15290 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
152a0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
152b0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
152c0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
152d0 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
152e0 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
152f0 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
15300 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
15310 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
15320 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
15330 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
15340 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
15350 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
15360 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
15370 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
15380 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
15390 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
153a0 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
153b0 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
153c0 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
153d0 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
153e0 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
153f0 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
15400 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
15410 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15420 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
15430 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
15440 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20   TK_BLOB,.** or 
15450 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
15460 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
15470 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
15480 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
15490 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
154a0 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
154b0 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
154c0 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
154d0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
154e0 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  .** variable nam
154f0 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74  e. Finally, if t
15500 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15510 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
15520 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a   (TK_FUNCTION),.
15530 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ** then Expr.tok
15540 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
15550 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
15560 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  tion..**.** Expr
15570 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72  .pRight and Expr
15580 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c  .pLeft are the l
15590 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75  eft and right su
155a0 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20  bexpressions of 
155b0 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72  a.** binary oper
155c0 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20  ator. Either or 
155d0 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c  both may be NULL
155e0 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  ..**.** Expr.x.p
155f0 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f  List is a list o
15600 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74  f arguments if t
15610 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15620 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
15630 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72  ,.** a CASE expr
15640 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20  ession or an IN 
15650 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
15660 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
15670 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e   (<y>, <z>...)".
15680 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  .** Expr.x.pSele
15690 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68  ct is used if th
156a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
156b0 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20  a sub-select or 
156c0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  an expression of
156d0 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c  .** the form "<l
156e0 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e  hs> IN (SELECT .
156f0 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f  ..)". If the EP_
15700 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73  xIsSelect bit is
15710 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45   set in the.** E
15720 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
15730 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c  then Expr.x.pSel
15740 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74  ect is valid. Ot
15750 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e  herwise, Expr.x.
15760 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69  pList is.** vali
15770 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
15780 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
15790 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
157a0 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
157b0 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
157c0 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
157d0 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
157e0 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
157f0 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
15800 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
15810 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
15820 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
15830 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
15840 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
15850 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
15860 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
15870 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
15880 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
15890 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
158a0 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
158b0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
158c0 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
158d0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
158e0 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
158f0 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
15900 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
15910 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
15920 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
15930 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
15940 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
15950 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
15960 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
15970 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
15980 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
15990 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
159a0 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
159b0 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
159c0 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
159d0 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
159e0 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e  s the index.** n
159f0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
15a00 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
15a10 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15a20 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
15a30 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
15a40 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
15a50 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
15a60 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
15a70 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
15a80 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
15a90 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
15aa0 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
15ab0 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
15ac0 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
15ad0 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
15ae0 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
15af0 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
15b00 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
15b10 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
15b20 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
15b30 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
15b40 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
15b50 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
15b60 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
15b70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
15b80 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
15b90 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
15ba0 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
15bb0 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
15bc0 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
15bd0 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
15be0 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
15bf0 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
15c00 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
15c10 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
15c20 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
15c30 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
15c40 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
15c50 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
15c60 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
15c70 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
15c80 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
15c90 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
15ca0 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
15cb0 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
15cc0 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
15cd0 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
15ce0 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
15cf0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
15d00 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
15d10 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
15d20 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
15d30 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
15d40 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
15d50 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
15d60 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
15d70 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
15d80 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
15d90 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
15da0 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
15db0 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
15dc0 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
15dd0 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
15de0 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
15df0 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
15e00 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
15e10 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
15e20 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
15e30 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
15e40 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
15e50 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
15e60 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
15e70 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
15e80 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
15e90 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
15ea0 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
15eb0 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
15ec0 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
15ed0 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
15ee0 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
15ef0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
15f00 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
15f10 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
15f20 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
15f30 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
15f40 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
15f50 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
15f60 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
15f70 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
15f80 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15f90 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
15fa0 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
15fb0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
15fc0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
15fd0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
15fe0 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
15ff0 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
16000 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
16010 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
16020 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
16030 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
16040 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
16050 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
16060 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
16070 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
16080 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
16090 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
160a0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
160b0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
160c0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
160d0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
160e0 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
160f0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
16100 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
16110 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
16120 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
16130 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
16140 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
16150 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
16160 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
16170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
161a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
161b0 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20    Expr *pLeft;  
161c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74           /* Left
161d0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78   subnode */.  Ex
161e0 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20  pr *pRight;     
161f0 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75       /* Right su
16200 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  bnode */.  union
16210 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20   {.    ExprList 
16220 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f  *pList;     /* o
16230 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
16240 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55  SELECT, CASE, FU
16250 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20  NCTION, BETWEEN 
16260 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
16270 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45  Select;     /* E
16280 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20  P_xIsSelect and 
16290 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
162a0 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78   SELECT */.  } x
162b0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
162c0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
162d0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
162e0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
162f0 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
16300 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
16310 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
16320 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
16330 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
16340 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
16350 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
16360 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
16370 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
16380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
163a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
163b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
163c0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
163d0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
163e0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
163f0 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
16400 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
16410 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
16420 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
16430 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
16440 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
16450 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
16460 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
16470 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
164a0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
164b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
164c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
164d0 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
164e0 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20  w, 0 -> old.    
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b       ** EP_Unlik
16510 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20  ely:  134217728 
16520 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64  times likelihood
16530 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
16540 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
16550 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
16560 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
16570 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
165a0 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
165b0 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20   (always >= 1). 
165c0 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
165d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
165e0 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
165f0 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
16600 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
16610 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
16620 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
16630 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
16640 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
16650 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
16660 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
16670 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
16680 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
16690 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
166c0 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
166d0 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
166e0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
166f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
16700 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
16710 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
16720 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
16730 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
16740 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
16750 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
16760 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65  CTION */.  Table
16770 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
16780 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54    /* Table for T
16790 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73  K_COLUMN express
167a0 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ions. */.};../*.
167b0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
167c0 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
167d0 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
167e0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
167f0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
16800 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30  _FromJoin  0x000
16810 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  001 /* Originate
16820 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c  s in ON/USING cl
16830 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f  ause of outer jo
16840 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
16850 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
16860 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
16870 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
16880 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
16890 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
168a0 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
168b0 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
168c0 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
168d0 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
168e0 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
168f0 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
16900 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
16910 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
16920 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
16930 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
16940 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
16950 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
16960 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
16970 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
16980 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
16990 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
169a0 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
169b0 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
169c0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
169d0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
169e0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
169f0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
16a00 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
16a10 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
16a20 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
16a30 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
16a40 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
16a50 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
16a60 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
16a70 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
16a80 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
16a90 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
16aa0 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
16ab0 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
16ac0 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
16ad0 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
16ae0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
16af0 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
16b00 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
16b10 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
16b20 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
16b30 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
16b40 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
16b50 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
16b60 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
16b70 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
16b80 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
16b90 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
16ba0 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
16bb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
16bc0 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
16bd0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
16be0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
16bf0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
16c00 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
16c10 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
16c20 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
16c30 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
16c40 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
16c50 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
16c60 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
16c70 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
16c80 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
16c90 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
16ca0 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
16cb0 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
16cc0 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
16cd0 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
16ce0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
16cf0 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
16d00 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
16d10 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
16d20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
16d30 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
16d40 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
16d50 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
16d60 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
16d70 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
16d80 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
16d90 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
16da0 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
16db0 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
16dc0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
16dd0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
16de0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
16df0 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
16e00 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
16e10 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
16e20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
16e30 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
16e40 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
16e50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
16e60 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
16e70 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
16e80 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
16e90 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a   column */../*.*
16ea0 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * Combinations o
16eb0 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50  f two or more EP
16ec0 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  _* flags.*/.#def
16ed0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
16ee0 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
16ef0 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f  Subquery) /* Pro
16f00 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74  pagate these bit
16f10 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a  s up tree */../*
16f20 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
16f30 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
16f40 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
16f50 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
16f60 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
16f70 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
16f80 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
16f90 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
16fa0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
16fb0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
16fc0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
16fd0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
16fe0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
16ff0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
17000 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
17010 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
17020 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
17030 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
17040 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
17050 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
17060 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
17070 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
17080 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
17090 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
170a0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
170b0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
170c0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
170d0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
170e0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
170f0 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
17100 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
17110 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
17120 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
17130 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
17140 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
17150 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
17160 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
17170 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
17180 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
17190 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
171a0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
171b0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
171c0 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
171d0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
171e0 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
171f0 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
17200 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
17210 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
17220 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
17230 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
17240 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
17250 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
17260 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
17270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
17280 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
17290 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
172a0 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
172b0 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
172c0 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
172d0 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
172e0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
172f0 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
17300 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
17310 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
17320 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
17330 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
17340 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
17350 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
17360 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
17370 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
17380 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
17390 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
173a0 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
173b0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
173c0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
173d0 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
173e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
173f0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
17400 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
17410 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
17420 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
17430 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
17440 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
17450 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
17460 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
17470 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
17480 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
17490 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
174a0 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
174b0 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
174c0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
174d0 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
174e0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
174f0 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
17500 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
17510 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
17520 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
17530 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
17540 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
17550 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
17560 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
17570 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
17580 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
17590 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
175a0 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
175b0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
175c0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
175d0 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
175e0 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
175f0 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
17600 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
17610 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
17620 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
17630 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
17640 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
17650 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
17660 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
17670 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
17680 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
17690 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
176a0 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
176b0 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
176c0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
176d0 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
176e0 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
176f0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
17700 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
17710 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
17720 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
17730 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
17740 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
17750 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
17760 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
17770 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17780 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
17790 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
177a0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
177b0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
177c0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
177d0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
177e0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
177f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
17800 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
17810 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
17820 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
17830 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
17840 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
17850 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
17860 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
17870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
17880 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
17890 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
178a0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
178b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
178c0 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
178d0 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
178e0 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
178f0 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
17900 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
17910 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
17920 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
17930 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
17940 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
17950 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
17960 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
17970 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
17980 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
17990 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
179a0 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
179b0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
179c0 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
179d0 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
179e0 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
179f0 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
17a00 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
17a10 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
17a20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
17a30 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
17a40 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
17a50 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
17a60 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
17a70 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
17a80 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17a90 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
17aa0 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
17ab0 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a  /.    } u;.  } *
17ac0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
17ad0 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
17ae0 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
17af0 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
17b00 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
17b10 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17b20 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17b30 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
17b40 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
17b50 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
17b60 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
17b70 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
17b80 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
17b90 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
17ba0 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
17bb0 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
17bc0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17bd0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
17be0 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
17bf0 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
17c00 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
17c10 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
17c20 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
17c30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
17c40 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
17c50 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
17c60 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
17c70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
17c80 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17c90 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17ca0 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
17cb0 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
17cc0 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
17cd0 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
17ce0 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
17cf0 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
17d00 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
17d10 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
17d20 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
17d30 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
17d40 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
17d50 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
17d60 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
17d70 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
17d80 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
17d90 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
17da0 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
17db0 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
17dc0 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
17dd0 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
17de0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
17df0 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
17e00 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
17e10 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
17e20 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
17e30 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
17e40 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
17e50 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
17e60 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
17e70 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
17e80 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
17e90 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
17ea0 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
17eb0 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
17ec0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
17ed0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
17ee0 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
17ef0 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
17f00 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
17f10 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
17f20 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
17f30 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
17f40 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
17f50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
17f60 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
17f70 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
17f80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
17f90 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
17fa0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
17fb0 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
17fc0 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
17fd0 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
17fe0 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
17ff0 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
18000 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
18010 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
18020 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
18030 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
18040 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
18050 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
18060 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
18070 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
18080 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
18090 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
180a0 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
180b0 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
180c0 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
180d0 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
180e0 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
180f0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
18100 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
18110 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
18120 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
18130 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
18140 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
18150 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
18160 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
18170 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
18180 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
18190 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
181a0 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
181b0 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
181c0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
181d0 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  <(n))../*.** The
181e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
181f0 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
18200 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
18210 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
18220 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
18230 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
18240 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
18250 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
18260 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
18270 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
18280 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
18290 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
182a0 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
182b0 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
182c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
182d0 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
182e0 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
182f0 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
18300 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
18310 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
18320 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
18330 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
18340 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
18350 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
18360 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
18370 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
18380 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
18390 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
183a0 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
183b0 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
183c0 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
183d0 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
183e0 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
183f0 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
18400 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
18410 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
18420 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
18430 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
18440 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
18450 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
18460 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
18470 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
18480 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
18490 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
184a0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
184b0 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
184c0 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
184d0 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
184e0 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
184f0 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
18500 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
18510 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
18520 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
18530 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
18540 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
18550 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
18560 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
18570 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
18580 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
18590 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
185a0 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
185b0 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
185c0 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
185d0 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
185e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
185f0 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
18600 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
18610 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
18620 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
18630 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
18640 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
18650 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
18660 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
18670 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
18680 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
18690 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
186a0 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
186b0 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
186c0 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
186d0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
186e0 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
186f0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
18700 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
18710 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
18720 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
18730 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
18740 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
18750 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
18760 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
18770 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
18780 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
18790 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
187a0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
187b0 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
187c0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
187d0 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
187e0 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
187f0 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
18800 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
18810 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
18820 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
18830 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
18840 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
18850 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
18860 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
18870 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
18880 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
18890 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
188a0 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
188b0 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
188c0 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
188d0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
188e0 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
188f0 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
18900 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
18910 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
18920 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
18930 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
18940 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
18950 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
18960 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
18970 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
18980 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
18990 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
189a0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
189b0 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
189c0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
189d0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
189e0 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
189f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
18a00 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
18a10 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
18a20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
18a30 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
18a40 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
18a50 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
18a60 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
18a70 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
18a80 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
18a90 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
18aa0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
18ab0 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
18ac0 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
18ad0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
18ae0 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
18af0 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23  H */.    } fg;.#
18b00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18b10 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
18b20 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
18b30 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
18b40 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
18b50 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
18b60 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
18b70 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
18b80 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
18b90 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
18ba0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
18bb0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
18bc0 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
18bd0 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
18be0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
18bf0 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
18c00 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
18c10 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
18c20 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
18c30 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
18c40 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
18c50 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
18c60 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
18c70 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
18c80 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
18c90 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
18ca0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
18cb0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
18cc0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
18cd0 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
18ce0 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
18cf0 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
18d00 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
18d10 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
18d20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
18d30 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
18d40 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
18d50 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
18d60 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
18d70 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
18d80 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
18d90 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
18da0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
18db0 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
18dc0 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
18dd0 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
18de0 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
18df0 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
18e00 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
18e10 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
18e20 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
18e30 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
18e40 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
18e50 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
18e60 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
18e70 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
18e80 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
18e90 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
18ea0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
18eb0 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
18ec0 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
18ed0 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
18ee0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
18ef0 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
18f00 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
18f10 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
18f20 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
18f30 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
18f40 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
18f50 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
18f60 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
18f70 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
18f80 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
18f90 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
18fa0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
18fb0 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
18fc0 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
18fd0 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
18fe0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
18ff0 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
19000 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
19010 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
19020 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
19030 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
19040 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
19050 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
19060 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
19070 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
19080 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
19090 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
190a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
190b0 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
190c0 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
190d0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
190e0 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
190f0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
19100 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
19110 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
19120 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
19130 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
19140 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
19150 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
19160 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
19170 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
19180 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
19190 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
191a0 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20  N_CLOSE  0x0010 
191b0 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
191c0 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
191d0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
191e0 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
191f0 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f      0x0020 /* Do
19200 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
19210 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
19220 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
19230 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
19240 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0040 /* Only c
19250 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
19260 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
19270 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e  .#define WHERE_N
19280 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20  O_AUTOINDEX     
19290 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c  0x0080 /* Disall
192a0 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  ow automatic ind
192b0 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
192c0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
192d0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
192e0 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
192f0 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
19300 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19310 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
19320 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
19330 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
19340 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
19350 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19360 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
19370 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
19380 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
19390 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
193a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
193b0 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
193c0 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0800 /* Support 
193d0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
193e0 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
193f0 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49  e WHERE_REOPEN_I
19400 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20  DX       0x1000 
19410 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50  /* Try to use OP
19420 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64  _ReopenIdx */.#d
19430 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
19440 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32  ASS_MULTIROW 0x2
19450 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  000 /* ONEPASS i
19460 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
19470 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
19480 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
19490 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
194a0 20 2f 2a 20 54 68 65 72 65 20 69 73 20 61 20 63   /* There is a c
194b0 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 63 6c  onstant LIMIT cl
194c0 61 75 73 65 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  ause */../* Allo
194d0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
194e0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
194f0 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
19500 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
19510 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
19520 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
19530 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
19540 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
19550 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
19560 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
19570 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
19580 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
19590 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
195a0 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
195b0 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
195c0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
195d0 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
195e0 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
195f0 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
19600 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
19610 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
19620 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
19630 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
19640 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
19650 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
19660 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
19670 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
19680 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
19690 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
196a0 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
196b0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
196c0 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
196d0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
196e0 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
196f0 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
19700 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
19710 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
19720 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
19730 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
19740 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
19750 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
19760 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
19770 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
19780 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
19790 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
197a0 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
197b0 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
197c0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
197d0 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
197e0 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
197f0 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
19800 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
19810 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
19820 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
19830 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
19840 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
19850 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
19860 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
19870 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
19880 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
19890 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
198a0 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
198b0 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
198c0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
198d0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
198e0 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
198f0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
19900 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
19910 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
19920 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
19930 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
19940 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
19950 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
19960 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
19970 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
19980 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
19990 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
199a0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
199b0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
199c0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
199d0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
199e0 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
199f0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
19a00 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
19a10 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
19a20 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
19a30 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
19a40 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
19a50 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
19a60 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
19a70 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
19a80 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
19a90 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
19aa0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
19ab0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
19ac0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
19ad0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
19ae0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
19af0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
19b00 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
19b10 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
19b20 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
19b30 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
19b40 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
19b50 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
19b60 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
19b70 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
19b80 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
19b90 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
19ba0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
19bb0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
19bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19bd0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
19be0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
19bf0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
19c00 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
19c10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
19c20 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
19c30 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
19c40 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
19c50 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
19c60 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
19c70 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
19c80 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
19c90 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
19ca0 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
19cb0 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
19cc0 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f   field..**.** No
19cd0 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  te:  NC_MinMaxAg
19ce0 67 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20  g must have the 
19cf0 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46  same value as SF
19d00 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a  _MinMaxAgg and.*
19d10 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  * SQLITE_FUNC_MI
19d20 4e 4d 41 58 2e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66  NMAX..**.*/.#def
19d30 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
19d40 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
19d50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
19d60 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
19d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
19d80 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20  asAgg    0x0002 
19d90 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
19da0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
19db0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
19dc0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
19dd0 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
19de0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
19df0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
19e00 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
19e10 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
19e20 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
19e30 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
19e40 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
19e50 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
19e60 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
19e70 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20  0x0010  /* True 
19e80 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
19e90 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
19ea0 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
19eb0 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32  _IdxExpr   0x002
19ec0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
19ed0 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  solving columns 
19ee0 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  of CREATE INDEX 
19ef0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
19f00 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
19f10 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
19f20 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
19f30 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
19f40 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19f50 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
19f60 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
19f70 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
19f80 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
19f90 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
19fa0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
19fb0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19fc0 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
19fd0 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
19fe0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
19ff0 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
1a000 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
1a010 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
1a020 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
1a030 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
1a040 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
1a050 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
1a060 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
1a070 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1a080 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
1a090 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
1a0a0 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
1a0b0 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
1a0c0 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
1a0d0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
1a0e0 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
1a0f0 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
1a100 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
1a110 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
1a120 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
1a130 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
1a140 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
1a150 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
1a160 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
1a170 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
1a180 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
1a190 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
1a1a0 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
1a1b0 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
1a1c0 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
1a1d0 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
1a1e0 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
1a1f0 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
1a200 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1a210 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
1a220 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
1a230 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
1a240 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
1a250 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
1a260 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
1a270 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
1a280 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
1a290 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
1a2a0 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
1a2b0 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
1a2c0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1a2d0 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
1a2e0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1a2f0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
1a300 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
1a310 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
1a320 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
1a330 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
1a340 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
1a350 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
1a360 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1a370 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
1a380 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
1a390 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
1a3a0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
1a3b0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
1a3c0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1a3d0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
1a3e0 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
1a3f0 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
1a400 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  CEPT */.  LogEst
1a410 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
1a420 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
1a430 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
1a440 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ows */.  u32 sel
1a450 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
1a460 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
1a470 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1a480 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
1a490 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1a4a0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
1a4b0 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
1a4c0 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
1a4d0 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
1a4e0 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
1a4f0 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
1a500 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
1a510 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
1a520 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
1a530 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
1a540 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
1a550 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
1a560 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
1a570 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
1a580 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1a590 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
1a5a0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1a5b0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1a5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a5d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
1a5e0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
1a5f0 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
1a600 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1a610 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
1a620 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
1a630 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
1a640 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1a650 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
1a660 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1a670 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
1a680 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
1a690 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
1a6a0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
1a6b0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
1a6c0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
1a6d0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1a6e0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
1a6f0 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
1a700 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
1a710 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
1a720 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
1a730 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1a740 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1a750 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
1a760 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
1a770 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1a780 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1a790 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
1a7a0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1a7b0 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
1a7c0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
1a7d0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
1a7e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1a7f0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
1a800 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
1a810 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
1a820 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
1a830 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
1a840 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1a850 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1a860 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1a870 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1a880 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1a890 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1a8a0 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1a8b0 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1a8c0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1a8d0 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1a8e0 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1a8f0 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1a900 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1a910 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1a920 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1a930 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1a940 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
1a960 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78  sesEphemeral  0x
1a970 30 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74  00010  /* Uses t
1a980 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
1a990 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
1a9a0 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
1a9b0 20 20 20 20 20 30 78 30 30 30 32 30 20 20 2f 2a       0x00020  /*
1a9c0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
1a9d0 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
1a9e0 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
1a9f0 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
1aa00 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 46     0x00040  /* F
1aa10 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
1aa20 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
1aa30 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
1aa40 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
1aa50 30 78 30 30 30 38 30 20 20 2f 2a 20 50 61 72 74  0x00080  /* Part
1aa60 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
1aa70 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
1aa80 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
1aa90 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 53 79    0x00100  /* Sy
1aaa0 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
1aab0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
1aac0 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69  #define SF_Multi
1aad0 56 61 6c 75 65 20 20 20 20 20 30 78 30 30 32 30  Value     0x0020
1aae0 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c  0  /* Single VAL
1aaf0 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75  UES term with mu
1ab00 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23  ltiple rows */.#
1ab10 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
1ab20 46 72 6f 6d 20 20 20 20 20 30 78 30 30 34 30 30  From     0x00400
1ab30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
1ab40 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
1ab50 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
1ab60 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1ab70 65 72 74 20 20 20 30 78 30 30 38 30 30 20 20 2f  ert   0x00800  /
1ab80 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1ab90 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1aba0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1abb0 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
1abc0 20 20 20 20 20 20 30 78 30 31 30 30 30 20 20 2f        0x01000  /
1abd0 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
1abe0 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
1abf0 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  max() */.#define
1ac00 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
1ac10 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54     0x02000  /* T
1ac20 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
1ac30 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
1ac40 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
1ac50 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20  SF_FixedLimit   
1ac60 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53    0x04000  /* nS
1ac70 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79 20  electRow set by 
1ac80 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54  a constant LIMIT
1ac90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1aca0 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 30 78  onverted      0x
1acb0 30 38 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e  08000  /* By con
1acc0 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1acd0 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1ace0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63  /.#define SF_Inc
1acf0 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78 31 30  ludeHidden  0x10
1ad00 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20  000  /* Include 
1ad10 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69  hidden columns i
1ad20 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a  n output */.../*
1ad30 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
1ad40 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
1ad50 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
1ad60 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1ad70 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
1ad80 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1ad90 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
1ada0 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
1adb0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1adc0 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1add0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1ade0 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1adf0 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1ae00 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1ae10 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20  ndex.**         
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1ae30 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1ae40 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1ae50 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1ae60 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1ae70 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1ae80 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1ae90 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1aea0 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1aeb0 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1aec0 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1aed0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1aee0 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1af10 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1af20 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1af30 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1af40 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1af50 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1af60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1af70 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1af80 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1af90 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1afa0 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1afc0 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1afd0 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1afe0 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1aff0 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1b000 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1b010 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1b020 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1b030 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1b040 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1b050 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1b060 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1b070 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1b080 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1b090 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1b0c0 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1b0d0 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1b0e0 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1b0f0 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1b100 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1b110 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1b120 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1b130 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1b140 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1b150 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1b160 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1b190 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1b1a0 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1b1b0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1b1c0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1b1d0 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1b1e0 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1b1f0 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1b200 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1b210 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1b220 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1b230 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1b240 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1b260 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1b270 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1b280 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1b290 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b2a0 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
1b2b0 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
1b2c0 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
1b2d0 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b2f0 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
1b300 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
1b310 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
1b320 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
1b330 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
1b340 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1b350 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1b360 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
1b390 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
1b3a0 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
1b3b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b3c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
1b3d0 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
1b3e0 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
1b3f0 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b410 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
1b420 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
1b430 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
1b440 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b450 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
1b460 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
1b470 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1b480 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
1b490 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
1b4a0 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
1b4b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b4c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
1b4d0 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
1b4e0 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
1b4f0 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
1b520 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
1b530 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1b540 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1b560 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
1b570 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
1b580 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
1b590 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1b5b0 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
1b5c0 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
1b5d0 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
1b5e0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1b5f0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
1b600 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1b610 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
1b620 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
1b630 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
1b640 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
1b650 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
1b680 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
1b690 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
1b6a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b6b0 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
1b6c0 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
1b6d0 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
1b6e0 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1b700 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1b710 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1b720 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
1b730 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
1b740 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1b750 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1b760 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b770 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
1b780 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
1b790 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1b7a0 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
1b7c0 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
1b7d0 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
1b7e0 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
1b7f0 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
1b800 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
1b810 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
1b820 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
1b830 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
1b840 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
1b850 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1b860 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1b870 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
1b880 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
1b890 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
1b8a0 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
1b8b0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
1b8c0 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
1b8d0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1b8e0 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
1b8f0 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
1b900 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1b910 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1b920 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1b930 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1b940 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
1b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b960 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
1b970 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
1b980 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
1b990 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1b9a0 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
1b9b0 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
1b9c0 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
1b9d0 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
1b9e0 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
1b9f0 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
1ba00 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
1ba10 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1ba20 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
1ba30 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
1ba40 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
1ba50 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
1ba60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1ba70 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
1ba80 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
1ba90 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
1baa0 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
1bab0 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1bac0 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
1bad0 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
1bae0 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
1baf0 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1bb00 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1bb10 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1bb20 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1bb30 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1bb40 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1bb50 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1bb60 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1bb70 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1bb80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1bb90 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1bba0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1bbb0 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1bbc0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1bbd0 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1bbe0 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1bbf0 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1bc00 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1bc10 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1bc20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1bc30 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1bc40 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1bc50 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1bc60 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1bc70 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1bc80 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1bc90 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1bca0 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1bcb0 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1bcc0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1bcd0 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1bce0 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1bcf0 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1bd00 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1bd10 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1bd20 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1bd30 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1bd40 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1bd50 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1bd60 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1bd70 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1bd80 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1bd90 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1bda0 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1bdb0 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1bdc0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1bdd0 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1bde0 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1bdf0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1be00 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1be10 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1be20 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1be30 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
1be40 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
1be50 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
1be60 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
1be70 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1be80 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
1be90 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
1bea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1beb0 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
1bec0 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
1bed0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
1bee0 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  e. */.  char aff
1bef0 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Sdst;        /* 
1bf00 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1bf10 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1bf20 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
1bf30 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
1bf40 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
1bf50 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
1bf60 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
1bf70 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
1bf80 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1bf90 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
1bfa0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
1bfb0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
1bfc0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1bfd0 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
1bfe0 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
1bff0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1c000 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
1c010 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
1c020 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
1c030 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
1c040 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
1c050 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
1c060 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
1c070 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
1c080 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61  OINCREMENT.** ta
1c090 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
1c0a0 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
1c0b0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
1c0c0 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
1c0d0 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
1c0e0 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
1c0f0 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
1c100 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
1c110 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1c120 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
1c130 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
1c140 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
1c150 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
1c160 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
1c170 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
1c180 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77  serts are done w
1c190 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
1c1a0 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
1c1b0 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
1c1c0 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
1c1d0 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
1c1e0 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
1c1f0 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
1c200 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
1c210 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
1c220 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
1c230 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
1c240 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
1c250 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
1c260 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
1c270 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
1c280 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
1c290 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
1c2a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
1c2b0 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
1c2c0 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
1c2d0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1c2e0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
1c2f0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
1c300 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
1c310 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
1c320 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
1c330 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1c340 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
1c350 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
1c360 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  ;../*.** Size of
1c370 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
1c380 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
1c390 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23  ITE_N_COLCACHE.#
1c3a0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1c3b0 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e  _COLCACHE 10.#en
1c3c0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  dif../*.** At le
1c3d0 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
1c3e0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1c3f0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
1c400 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a  reated for each.
1c410 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1c420 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1c430 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1c440 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1c450 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1c460 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1c470 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1c480 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1c490 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1c4a0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1c4b0 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1c4c0 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1c4d0 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1c4e0 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1c4f0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1c500 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1c510 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1c520 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1c530 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1c540 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1c550 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1c560 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1c570 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1c580 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1c590 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1c5a0 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1c5b0 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1c5c0 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1c5d0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1c5e0 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1c5f0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1c600 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1c610 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1c620 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1c630 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1c640 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1c650 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1c660 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1c670 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1c680 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1c690 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1c6a0 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1c6b0 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1c6c0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
1c6d0 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
1c6e0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1c6f0 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
1c700 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
1c710 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
1c720 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
1c730 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
1c740 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
1c750 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1c760 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
1c770 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
1c780 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
1c790 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
1c7a0 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
1c7b0 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
1c7c0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1c7d0 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
1c7e0 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
1c7f0 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
1c800 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
1c810 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
1c820 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
1c830 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1c840 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1c850 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
1c860 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
1c870 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
1c880 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
1c890 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
1c8a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
1c8b0 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
1c8c0 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
1c8d0 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
1c8e0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
1c8f0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
1c900 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
1c910 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
1c920 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
1c930 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
1c940 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
1c950 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1c960 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
1c970 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
1c980 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1c990 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
1c9a0 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
1c9b0 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
1c9c0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1c9d0 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
1c9e0 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
1c9f0 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1ca00 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
1ca10 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
1ca20 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1ca30 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
1ca40 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1ca50 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
1ca60 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
1ca70 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
1ca80 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1ca90 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
1caa0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1cab0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1cac0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1cad0 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
1cae0 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1caf0 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
1cb00 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
1cb10 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1cb20 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
1cb30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1cb40 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
1cb50 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
1cb60 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
1cb70 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
1cb80 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1cb90 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
1cba0 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
1cbb0 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
1cbc0 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
1cbd0 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
1cbe0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
1cbf0 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
1cc00 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
1cc10 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
1cc20 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
1cc30 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
1cc40 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
1cc50 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
1cc60 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
1cc70 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
1cc80 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
1cc90 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
1cca0 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
1ccb0 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
1ccc0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
1ccd0 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
1cce0 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
1ccf0 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
1cd00 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
1cd10 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
1cd20 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
1cd30 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
1cd40 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
1cd50 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
1cd60 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75  d-cache.** featu
1cd70 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1cd80 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1cd90 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1cda0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1cdb0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1cdc0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1cdd0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1cde0 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1cdf0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1ce00 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1ce10 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1ce20 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1ce30 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1ce40 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1ce50 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1ce60 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1ce70 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1ce80 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1ce90 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1cea0 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1ceb0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1cec0 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1ced0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1cee0 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1cef0 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1cf00 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1cf10 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1cf20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1cf30 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1cf40 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1cf50 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1cf60 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1cf70 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1cf80 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1cf90 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1cfa0 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1cfb0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1cfc0 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1cfd0 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1cfe0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1cff0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1d000 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1d010 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1d020 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1d030 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1d040 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1d050 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1d060 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1d070 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1d080 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1d090 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1d0a0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1d0b0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1d0c0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1d0d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1d0e0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1d0f0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1d100 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1d110 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1d120 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1d130 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1d140 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1d150 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1d160 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1d170 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1d180 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1d190 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f  /.  u8 disableLo
1d1a0 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62  okaside; /* Numb
1d1b0 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b  er of times look
1d1c0 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64  aside has been d
1d1d0 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74  isabled */.  int
1d1e0 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
1d1f0 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
1d200 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
1d210 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69  registers */.  i
1d220 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
1d230 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
1d240 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
1d250 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1d260 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
1d270 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1d280 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
1d290 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1d2a0 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
1d2b0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1d2c0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
1d2d0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1d2e0 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
1d2f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
1d300 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
1d310 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
1d320 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
1d330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d340 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
1d350 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
1d360 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20  */.  int nSet;  
1d370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d380 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64  ber of sets used
1d390 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1d3a0 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20   nOnce;         
1d3b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
1d3c0 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69  P_Once instructi
1d3d0 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ons so far */.  
1d3e0 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20  int nOpAlloc;   
1d3f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d400 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
1d410 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1d420 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c   */.  int szOpAl
1d430 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79  loc;       /* By
1d440 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  tes of memory sp
1d450 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ace allocated fo
1d460 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1d470 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20    int iFixedOp; 
1d480 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20         /* Never 
1d490 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73  back out opcodes
1d4a0 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65   iFixedOp-1 or e
1d4b0 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20  arlier */.  int 
1d4c0 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
1d4d0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1d4e0 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
1d4f0 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
1d500 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c  ts */.  int iSel
1d510 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  fTab;        /* 
1d520 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65  Table of an inde
1d530 78 20 77 68 6f 73 65 20 65 78 70 72 73 20 61 72  x whose exprs ar
1d540 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f  e being coded */
1d550 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
1d560 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
1d570 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
1d580 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
1d590 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
1d5a0 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
1d5b0 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
1d5c0 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
1d5d0 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
1d5e0 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
1d5f0 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
1d600 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d610 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
1d620 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
1d630 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
1d640 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
1d650 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  bels */.  struct
1d660 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
1d670 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
1d680 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1d690 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
1d6a0 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e  .    i16 iColumn
1d6b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1d6c0 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
1d6d0 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
1d6e0 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
1d6f0 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
1d700 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
1d710 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
1d720 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
1d730 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
1d740 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
1d750 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
1d760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1d770 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
1d780 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
1d790 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
1d7a0 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
1d7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
1d7c0 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
1d7d0 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
1d7e0 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
1d7f0 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
1d800 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
1d810 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
1d820 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
1d830 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c  entry */.  ExprL
1d840 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b  ist *pConstExpr;
1d850 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1d860 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b  essions */.  Tok
1d870 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
1d880 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
1d890 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
1d8a0 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
1d8b0 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  ed */.  yDbMask 
1d8c0 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20  writeMask;   /* 
1d8d0 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
1d8e0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
1d8f0 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
1d900 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65    yDbMask cookie
1d910 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73  Mask;  /* Bitmas
1d920 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
1d930 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
1d940 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
1d950 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
1d960 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
1d970 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
1d980 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
1d990 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
1d9a0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1d9b0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
1d9c0 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
1d9d0 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
1d9e0 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
1d9f0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1da00 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
1da10 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
1da20 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
1da30 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
1da40 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
1da50 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
1da60 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
1da70 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  m */.#if SELECTT
1da80 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69  RACE_ENABLED.  i
1da90 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
1daa0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1dab0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1dac0 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  ts seen */.  int
1dad0 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20   nSelectIndent; 
1dae0 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20    /* How far to 
1daf0 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41  indent SELECTTRA
1db00 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23  CE() output */.#
1db10 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1db20 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
1db30 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
1db40 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
1db50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
1db60 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
1db70 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
1db80 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
1db90 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
1dba0 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
1dbb0 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
1dbc0 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
1dbd0 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
1dbe0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1dbf0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
1dc00 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
1dc10 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
1dc20 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
1dc30 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
1dc40 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1dc50 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1dc60 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1dc70 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1dc80 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1dc90 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1dca0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1dcb0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1dcc0 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1dcd0 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1dce0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1dcf0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1dd00 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1dd10 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
1dd20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1dd30 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1dd40 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1dd50 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1dd60 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1dd70 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1dd80 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1dd90 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1dda0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1ddb0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1ddc0 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1ddd0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1dde0 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1ddf0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1de00 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1de10 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1de20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1de30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1de40 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1de50 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1de60 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1de70 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1de80 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1de90 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1dea0 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1deb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ded0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1dee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1def0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1df00 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1df10 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1df20 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1df30 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1df40 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1df50 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1df60 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1df70 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1df80 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1df90 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1dfa0 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1dfb0 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1dfc0 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1dfd0 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1dfe0 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1dff0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1e000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e  *********/..  yn
1e040 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20  Var nVar;       
1e050 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e060 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1e070 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1e080 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1e090 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1e0a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e0b0 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1e0c0 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1e0d0 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1e0e0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1e0f0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1e100 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1e110 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
1e120 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1e130 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1e140 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1e150 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1e160 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1e170 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1e180 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1e190 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1e1a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e1b0 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1e1c0 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1e1d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1e1e0 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1e1f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1e200 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1e210 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1e220 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1e230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e240 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1e250 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1e260 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1e270 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1e280 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1e290 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1e2a0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1e2b0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1e2c0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1e2d0 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1e2f0 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1e300 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1e310 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1e320 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1e330 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1e340 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1e350 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1e360 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1e370 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1e380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1e390 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1e3a0 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1e3b0 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1e3c0 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1e3d0 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1e3e0 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1e3f0 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1e400 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1e410 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1e420 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1e430 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1e440 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1e450 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1e460 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1e470 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1e480 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1e490 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1e4a0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1e4b0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1e4c0 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1e4d0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1e4e0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1e4f0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1e500 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1e510 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1e520 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1e530 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1e540 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1e550 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1e560 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1e570 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1e580 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1e590 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1e5a0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1e5b0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e5c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1e5d0 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1e5e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e5f0 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1e600 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1e610 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1e620 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1e630 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1e640 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1e650 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1e660 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1e670 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1e680 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1e690 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1e6a0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1e6b0 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1e6c0 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1e6d0 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1e6e0 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1e6f0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1e700 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1e710 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1e720 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1e730 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69   or NULL */.  Wi
1e740 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b  th *pWithToFree;
1e750 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20          /* Free 
1e760 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74  this WITH object
1e770 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
1e780 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a  he parse */.};..
1e790 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1e7a0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1e7b0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1e7c0 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1e7d0 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1e7e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1e7f0 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1e800 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1e810 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1e820 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1e830 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1e840 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1e850 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1e860 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1e870 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1e880 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1e890 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1e8a0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1e8b0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1e8c0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1e8d0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1e8e0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1e8f0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1e900 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1e910 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1e920 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1e930 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1e940 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1e950 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1e960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e970 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1e980 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1e990 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1e9a0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1e9b0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1e9c0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e9d0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1e9e0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
1e9f0 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
1ea00 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
1ea10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
1ea40 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
1ea50 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
1ea60 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1ea70 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
1ea80 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
1ea90 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
1eaa0 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
1eab0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1eac0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1ead0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1eae0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1eaf0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1eb00 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1eb10 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1eb20 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1eb30 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1eb40 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1eb50 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1eb60 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1eb70 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1eb80 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1eb90 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1eba0 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1ebb0 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1ebc0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1ebd0 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1ebe0 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1ebf0 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1ec00 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1ec10 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1ec20 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1ec30 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1ec40 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1ec50 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1ec60 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1ec70 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ec80 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1ec90 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1eca0 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1ecb0 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1ecc0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ecd0 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
1ece0 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
1ecf0 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
1ed00 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
1ed10 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
1ed20 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
1ed30 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
1ed40 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
1ed50 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
1ed60 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
1ed70 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
1ed80 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
1ed90 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
1eda0 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
1edb0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
1edc0 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
1edd0 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
1ede0 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
1edf0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1ee00 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
1ee10 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
1ee20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65 65 70 20  OP_Delete: keep 
1ee30 63 75 72 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20  cursor position 
1ee40 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ee50 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20  G_AUXDELETE     
1ee60 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x04    /* OP_De
1ee70 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61  lete: index in a
1ee80 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f   DELETE op */../
1ee90 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
1eea0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
1eeb0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1eec0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
1eed0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
1eee0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
1eef0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
1ef00 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
1ef10 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
1ef20 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
1ef30 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
1ef40 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
1ef50 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
1ef60 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
1ef70 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
1ef80 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
1ef90 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1efa0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1efb0 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1efc0 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1efd0 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1efe0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1eff0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1f000 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1f010 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1f020 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1f030 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1f040 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1f050 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1f060 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1f070 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1f080 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1f090 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1f0a0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1f0b0 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1f0c0 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1f0d0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1f0e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1f0f0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1f100 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1f110 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1f120 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1f130 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1f140 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1f150 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1f160 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1f170 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1f180 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1f190 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1f1c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1f1d0 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1f1e0 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1f1f0 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1f200 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f220 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1f230 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1f240 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1f250 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1f260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1f270 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1f280 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1f290 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1f2a0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1f2b0 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1f2c0 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1f2d0 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1f2e0 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1f2f0 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1f300 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1f310 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1f320 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1f330 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f350 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1f360 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1f370 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1f380 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1f390 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1f3a0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1f3b0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1f3c0 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1f3d0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1f3e0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1f3f0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1f400 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1f410 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1f420 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1f430 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1f440 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1f450 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1f460 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1f470 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1f480 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1f490 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1f4a0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1f4b0 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1f4c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1f4d0 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1f4e0 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
1f4f0 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
1f500 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
1f510 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
1f520 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
1f530 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
1f540 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
1f550 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
1f560 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
1f570 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
1f580 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
1f590 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
1f5a0 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
1f5b0 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
1f5c0 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
1f5d0 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
1f5e0 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
1f5f0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
1f600 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
1f610 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
1f620 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
1f630 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
1f640 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
1f650 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
1f660 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
1f670 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
1f680 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
1f690 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
1f6a0 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
1f6b0 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
1f6c0 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
1f6d0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
1f6e0 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
1f6f0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
1f700 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
1f710 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
1f720 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
1f730 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
1f740 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
1f750 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
1f760 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
1f770 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
1f780 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
1f790 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
1f7a0 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
1f7b0 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
1f7c0 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
1f7d0 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
1f7e0 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
1f7f0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
1f800 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
1f810 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
1f820 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
1f830 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
1f840 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
1f850 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1f860 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
1f870 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
1f880 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1f890 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1f8a0 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
1f8b0 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
1f8c0 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
1f8d0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
1f8e0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
1f8f0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1f900 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1f910 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1f920 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1f930 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1f940 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1f950 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1f970 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1f980 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1f990 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1f9a0 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1f9b0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1f9c0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1f9d0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1f9e0 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
1f9f0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1fa00 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
1fa10 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
1fa20 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
1fa40 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
1fa50 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
1fa60 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
1fa70 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
1fa80 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1fa90 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
1faa0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
1fab0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1fac0 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
1fad0 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
1fae0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
1fb00 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
1fb10 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
1fb20 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
1fb30 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
1fb40 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1fb50 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
1fb60 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1fb70 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1fb80 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1fb90 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1fba0 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1fbb0 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1fbc0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1fbd0 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1fbe0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1fbf0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1fc00 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1fc10 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1fc20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1fc30 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1fc40 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1fc50 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1fc60 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1fc70 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
1fc80 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
1fc90 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fcb0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1fcc0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1fcd0 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
1fce0 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
1fcf0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
1fd00 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
1fd10 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
1fd20 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
1fd30 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
1fd40 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
1fd50 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
1fd60 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
1fd70 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
1fd80 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1fd90 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
1fda0 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
1fdb0 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
1fdc0 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
1fdd0 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
1fde0 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
1fdf0 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
1fe00 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1fe10 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
1fe20 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
1fe30 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1fe40 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
1fe50 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
1fe60 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
1fe70 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
1fe80 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
1fe90 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
1fea0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
1feb0 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
1fec0 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
1fed0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1fee0 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
1fef0 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
1ff00 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
1ff10 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
1ff20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
1ff30 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1ff40 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
1ff50 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
1ff60 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
1ff70 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
1ff80 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
1ff90 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
1ffa0 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
1ffb0 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
1ffc0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
1ffd0 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
1ffe0 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
1fff0 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
20000 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
20010 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
20020 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
20030 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
20040 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
20050 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
20060 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
20070 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
20080 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
20090 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
200a0 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
200b0 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
200c0 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
200d0 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
200e0 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
200f0 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
20100 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
20110 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
20120 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
20130 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
20140 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
20150 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
20160 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
20170 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
20180 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
20190 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
201a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
201b0 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
201c0 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
201d0 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
201e0 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
201f0 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
20200 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
20210 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
20220 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
20230 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
20240 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
20250 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
20260 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
20270 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
20280 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
20290 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
202a0 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
202b0 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
202c0 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
202d0 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
202e0 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
202f0 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
20300 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  r */.  u32  nCha
20310 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
20320 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
20330 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
20340 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
20350 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
20360 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
20370 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
20380 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
20390 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
203a0 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
203b0 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
203c0 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
203d0 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
203e0 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
203f0 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
20400 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75  UM_TOOBIG */.  u
20410 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b  8   printfFlags;
20420 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52      /* SQLITE_PR
20430 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77  INTF flags below
20440 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
20450 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
20460 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
20470 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65  UM_TOOBIG  2.#de
20480 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
20490 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
204a0 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73    /* Internal-us
204b0 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72  e-only converter
204c0 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  s allowed */.#de
204d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
204e0 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
204f0 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f    /* SQL functio
20500 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56  n arguments to V
20510 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69  XPrintf */.#defi
20520 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
20530 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20  _MALLOCED 0x04  
20540 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74  /* True if xText
20550 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70   is allocated sp
20560 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ace */..#define 
20570 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28  isMalloced(X)  (
20580 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ((X)->printfFlag
20590 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
205a0 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a  F_MALLOCED)!=0).
205b0 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
205c0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
205d0 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
205e0 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
205f0 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
20600 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
20610 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
20620 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
20630 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
20640 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
20650 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
20660 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
20670 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
20680 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
20690 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
206a0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
206b0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
206c0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
206d0 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
206e0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
206f0 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
20700 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
20710 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
20720 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
20730 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
20740 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
20750 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
20760 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
20770 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
20780 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
20790 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
207a0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
207b0 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
207c0 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
207d0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
207e0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
207f0 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
20800 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
20810 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
20820 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
20830 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
20840 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20860 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
20870 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
20880 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
20890 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
208a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
208b0 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
208c0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
208d0 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
208e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
208f0 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
20900 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
20910 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
20920 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
20930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
20940 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
20950 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
20960 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
20970 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
20980 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
20990 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
209a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
209b0 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
209c0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
209d0 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
209e0 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
209f0 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
20a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a10 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
20a20 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
20a30 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
20a40 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
20a50 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
20a60 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
20a70 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
20a80 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20  int nStmtSpill; 
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61    /* Stmt-journa
20ab0 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20  l spill-to-disk 
20ac0 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73  threshold */.  s
20ad0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
20ae0 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
20af0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
20b00 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
20b10 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
20b20 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
20b30 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
20b40 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
20b50 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
20b60 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
20b70 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
20b80 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
20b90 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
20ba0 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
20bb0 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20bd0 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
20be0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
20bf0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
20c00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
20c10 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
20c20 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
20c30 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
20c40 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
20c50 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
20c60 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
20c70 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
20c80 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
20c90 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
20ca0 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
20cb0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
20cc0 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
20cd0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
20ce0 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
20cf0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
20d00 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
20d10 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
20d20 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
20d30 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
20d60 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
20d70 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
20d80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20d90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20da0 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
20db0 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
20dc0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
20dd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
20de0 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
20df0 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
20e20 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
20e30 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
20e40 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20e60 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
20e70 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
20e80 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
20e90 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
20ea0 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
20eb0 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
20ec0 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
20ed0 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
20ee0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
20ef0 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
20f00 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
20f10 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
20f20 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
20f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
20f40 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
20f50 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
20f60 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
20f70 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
20f80 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
20f90 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
20fa0 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
20fb0 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
20fc0 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
20fd0 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20ff0 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
21000 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
21010 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
21020 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
21050 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
21060 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
21070 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21090 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
210a0 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
210b0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
210c0 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
210e0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
210f0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
21100 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
21110 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
21120 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21130 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
21140 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
21150 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
21160 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
21170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21180 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
21190 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
211a0 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
211b0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
211c0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
211d0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
211e0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
211f0 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
21200 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
21210 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
21220 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
21230 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21250 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
21260 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
21270 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
21280 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
21290 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
212a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
212b0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
212c0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
212d0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
212e0 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
212f0 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
21300 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
21310 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
21320 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
21330 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
21340 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
21350 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
21360 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
21370 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
21380 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
21390 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
213a0 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
213b0 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
213c0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
213d0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
213e0 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21410 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
21420 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
21430 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
21440 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20  LTIN_TEST.  int 
21450 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
21460 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
21470 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
21480 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
21490 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
214a0 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
214b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
214c0 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
214d0 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
214e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
214f0 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
21500 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
21510 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
21520 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
21530 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
21540 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
21550 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
21560 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
21570 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
21580 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
21590 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
215a0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
215b0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
215c0 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
215d0 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
215e0 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
215f0 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
21600 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
21610 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
21620 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
21630 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
21640 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
21650 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
21660 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
21670 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
21680 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
21690 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
216a0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
216b0 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
216c0 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
216d0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
216e0 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
216f0 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
21700 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
21710 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
21720 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
21730 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
21740 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
21750 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
21760 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
21770 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
21780 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
21790 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
217a0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
217b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
217d0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
217e0 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70   */.  int (*xExp
217f0 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
21800 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
21810 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
21820 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
21830 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
21840 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
21850 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
21860 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
21870 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
21880 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
21890 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
218a0 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
218b0 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
218c0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
218d0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
21900 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
21910 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
21920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21930 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
21940 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
21950 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
21990 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
219a0 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
219b0 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
219d0 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
219e0 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20  */.    int n;   
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a10 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
21a20 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a50 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
21a60 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
21a70 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a90 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
21aa0 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
21ab0 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
21ac0 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
21ad0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
21ae0 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
21af0 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  nces */.    stru
21b00 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43  ct CCurHint *pCC
21b10 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20  urHint;         
21b20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
21b30 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74  y codeCursorHint
21b40 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  () */.    int *a
21b50 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  iCol;           
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66       /* array of
21b80 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20   column indexes 
21b90 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
21ba0 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
21bb0 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
21bc0 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
21bd0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
21be0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
21bf0 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
21c00 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
21c10 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
21c20 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
21c30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
21c40 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
21c50 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
21c60 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
21c70 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
21c80 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
21c90 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c  t sqlite3ExprWal
21ca0 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45  kNoop(Walker*, E
21cb0 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  xpr*);../*.** Re
21cc0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
21cd0 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
21ce0 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
21cf0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
21d00 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
21d10 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
21d20 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
21d30 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
21d40 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
21d50 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
21d60 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
21d70 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
21d80 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
21d90 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
21da0 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
21db0 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
21dc0 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
21dd0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
21de0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
21df0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
21e00 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
21e10 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
21e20 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
21e30 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
21e40 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
21e50 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
21e60 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
21e70 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
21e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21e90 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
21ea0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
21eb0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
21ec0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
21ed0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
21ee0 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
21ef0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
21f00 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21f20 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
21f30 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
21f40 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
21f50 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
21f60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21f70 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
21f80 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
21f90 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
21fa0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
21fb0 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
21fc0 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
21fd0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
21fe0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
21ff0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
22000 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
22010 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
22020 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
22030 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
22040 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
22050 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
22060 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
22070 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
22080 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
22090 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
220a0 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
220b0 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
220c0 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
220d0 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
220e0 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
220f0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
22100 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
22110 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
22120 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
22130 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
22140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
22150 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
22160 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
22170 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
22180 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
22190 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
221a0 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
221b0 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
221c0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
221d0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
221e0 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
221f0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
22200 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
22210 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
22220 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
22230 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
22240 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
22250 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
22260 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
22270 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
22280 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222a0 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
222b0 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222d0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
222e0 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
222f0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
22300 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
22310 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
22350 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
22360 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
22370 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
22380 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
22390 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
223a0 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
223b0 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
223c0 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
223d0 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
223e0 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
223f0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
22400 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
22410 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
22420 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
22430 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
22440 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
22450 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
22460 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
22470 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
22480 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
22490 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
224a0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
224b0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
224c0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
224d0 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
224e0 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
224f0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
22500 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
22510 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
22520 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
22530 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
22540 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
22550 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
22560 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
22570 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
22580 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
22590 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
225a0 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
225b0 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
225c0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
225d0 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
225e0 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  ror(int);.# defi
225f0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
22600 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65  BKPT sqlite3Nome
22610 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
22620 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22630 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
22640 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  T sqlite3Ioerrno
22650 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
22660 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  _).#else.# defin
22670 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
22680 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
22690 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
226a0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
226b0 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
226c0 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  OMEM.#endif../*.
226d0 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
226e0 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
226f0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
22700 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
22710 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22720 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
22730 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
22740 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
22750 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22760 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
22770 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
22780 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
22790 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
227a0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
227b0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
227c0 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
227d0 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
227e0 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
227f0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
22800 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
22810 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
22820 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
22830 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
22840 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
22850 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
22860 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22870 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
22880 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
22890 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
228a0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
228b0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
228c0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
228d0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
228e0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
228f0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
22900 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
22910 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
22920 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
22930 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
22940 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
22950 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
22960 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
22970 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
22980 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
22990 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
229a0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
229b0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
229c0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
229d0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
229e0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
229f0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
22a00 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
22a10 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
22a20 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
22a30 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
22a40 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
22a50 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
22a60 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
22a70 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
22a80 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
22a90 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
22aa0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
22ab0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
22ac0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
22ad0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
22ae0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
22af0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
22b00 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
22b10 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
22b20 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
22b30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22b40 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
22b50 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
22b60 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22b70 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
22b80 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
22b90 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
22ba0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
22bb0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
22bc0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22bd0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
22be0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
22bf0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
22c00 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
22c10 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
22c20 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
22c30 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
22c40 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
22c50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
22c60 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
22c70 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
22c80 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
22c90 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
22ca0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
22cb0 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
22cc0 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
22cd0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
22ce0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
22cf0 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
22d00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
22d10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22d20 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
22d30 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
22d40 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
22d50 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
22d60 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
22d70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
22d80 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
22d90 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
22da0 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
22db0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
22dc0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
22dd0 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
22de0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
22df0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
22e00 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
22e10 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
22e20 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
22e30 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
22e40 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
22e50 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e  EOPTION_DIAGS.in
22e60 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61  t sqlite3IsIdCha
22e70 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  r(u8);.#endif../
22e80 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
22e90 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
22ea0 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
22eb0 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
22ec0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
22ed0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
22ee0 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
22ef0 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  *);.const char *
22f00 73 71 6c 69 74 65 33 53 74 72 4e 65 78 74 28 63  sqlite3StrNext(c
22f10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
22f20 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
22f30 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
22f40 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
22f50 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
22f60 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
22f70 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
22f80 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
22f90 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
22fa0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
22fb0 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
22fc0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
22fd0 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
22fe0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
22ff0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
23000 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
23010 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
23020 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  cRawNN(sqlite3*,
23030 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
23040 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
23050 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
23060 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
23070 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
23080 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23090 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
230a0 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
230b0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
230c0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
230d0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
230e0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
230f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
23100 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
23110 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
23120 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
23130 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
23140 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
23150 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
23160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
23170 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
23180 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
23190 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
231a0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
231b0 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
231c0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
231d0 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
231e0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
231f0 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
23200 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
23210 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
23220 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
23230 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
23240 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
23250 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
23260 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
23270 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
23280 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a  (void));.#endif.
23290 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
232a0 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
232b0 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
232c0 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
232d0 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
232e0 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
232f0 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
23300 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
23310 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
23320 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
23330 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
23340 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
23350 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
23360 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
23370 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
23380 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
23390 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
233a0 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
233b0 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
233c0 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
233d0 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
233e0 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
233f0 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
23400 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
23410 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
23420 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
23430 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
23440 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
23450 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
23460 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
23470 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
23480 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
23490 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a  Free(D,P).#else.
234a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
234b0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
234c0 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
234d0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
234e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
234f0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
23500 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
23510 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
23520 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
23530 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
23540 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
23550 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
23560 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
23570 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
23580 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
23590 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
235a0 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
235b0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
235c0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
235d0 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
235e0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
235f0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
23600 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
23610 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
23620 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
23630 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
23640 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
23650 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
23660 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
23670 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
23680 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
23690 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
236a0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
236b0 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
236c0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
236d0 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
236e0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
236f0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
23700 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
23710 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
23720 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
23730 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
23740 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
23750 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
23760 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
23770 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23780 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
23790 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
237a0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
237b0 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
237c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
237d0 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
237e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
237f0 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
23800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
23810 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
23820 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63  t, int);../* Acc
23830 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
23840 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
23850 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
23860 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
23870 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
23880 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
23890 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
238a0 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
238b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
238c0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
238d0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
238e0 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
238f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
23900 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
23910 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
23920 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
23930 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
23940 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
23950 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
23960 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
23970 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
23980 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
23990 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
239a0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
239b0 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
239c0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
239d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
239e0 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
239f0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
23a00 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
23a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23a20 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
23a30 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
23a40 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
23a50 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
23a60 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
23a70 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20  ues */.};..void 
23a80 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
23a90 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
23aa0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
23ab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  ;.void sqlite3XP
23ac0 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
23ad0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
23ae0 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
23af0 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
23b00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
23b10 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
23b20 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
23b30 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23b40 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
23b50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
23b60 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
23b70 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
23b80 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
23b90 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
23ba0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
23bb0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
23bc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
23bd0 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
23be0 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
23bf0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
23c00 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
23c10 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
23c20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
23c30 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
23c40 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
23c50 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
23c60 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
23c70 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
23c80 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
23c90 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  *, u8, const cha
23ca0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
23cb0 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
23cc0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
23cd0 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b  st Select*, u8);
23ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
23cf0 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65  reeViewWith(Tree
23d00 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74  View*, const Wit
23d10 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  h*, u8);.#endif.
23d20 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
23d30 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
23d40 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
23d50 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
23d60 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
23d70 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
23d80 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c  *, ...);.int sql
23d90 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
23da0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23db0 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a  TokenInit(Token*
23dc0 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,char*);.int sql
23dd0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
23de0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
23df0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
23e00 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
23e10 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
23e20 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
23e30 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
23e40 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
23e50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
23e60 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
23e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
23e80 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
23e90 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
23ea0 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
23eb0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
23ec0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
23ed0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
23ee0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
23ef0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
23f00 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
23f10 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
23f20 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
23f30 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
23f40 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
23f50 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
23f60 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23f70 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23f80 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
23f90 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
23fa0 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
23fb0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
23fc0 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
23fd0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
23fe0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
23ff0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
24000 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
24010 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
24020 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
24030 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
24040 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
24050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24060 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
24070 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
24080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24090 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
240a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
240b0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
240c0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
240d0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
240e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
240f0 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
24100 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
24110 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24120 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
24130 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
24140 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
24150 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
24160 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
24170 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
24180 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
24190 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
241a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
241b0 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
241c0 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
241d0 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
241e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
241f0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
24200 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
24210 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
24220 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
24230 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
24240 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
24250 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24260 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
24270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
24280 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
24290 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
242a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
242b0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
242c0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
242d0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
242e0 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
242f0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
24300 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
24310 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
24320 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
24330 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
24340 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
24350 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
24360 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
24370 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
24380 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
24390 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  umn**);.Table *s
243a0 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
243b0 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
243c0 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
243d0 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
243e0 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
243f0 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
24400 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
24410 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
24420 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
24430 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
24440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
24450 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
24460 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
24470 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
24480 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
24490 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
244a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
244b0 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
244c0 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
244d0 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
244e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
244f0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
24500 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
24510 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
24520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
24530 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
24540 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
24550 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
24560 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
24570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24580 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
24590 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
245a0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
245b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
245c0 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
245d0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
245e0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
245f0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
24600 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
24610 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
24620 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
24630 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24640 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
24650 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24660 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
24670 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
24680 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
24690 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
246a0 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246c0 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
246d0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
246e0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
246f0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
24700 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
24710 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
24720 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
24730 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
24740 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
24750 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24760 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
24770 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
24780 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
24790 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
247a0 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
247b0 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
247c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
247d0 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
247e0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
247f0 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
24800 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
24810 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
24820 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
24830 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
24840 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
24850 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
24860 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
24870 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
24880 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
24890 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
248a0 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
248b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
248c0 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73  ILTIN_TEST.int s
248d0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
248e0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
248f0 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
24900 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
24910 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
24920 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
24930 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24940 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
24950 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
24960 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
24970 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
24980 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
24990 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
249a0 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
249b0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
249c0 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
249d0 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
249e0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
249f0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
24a00 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  n*,Token*,ExprLi
24a10 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  st*,Select*,int,
24a20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
24a30 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
24a40 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
24a50 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
24a60 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
24a70 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
24a80 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
24a90 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
24aa0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24ab0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
24ac0 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
24ad0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
24ae0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
24af0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
24b00 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
24b10 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
24b20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
24b30 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
24b40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
24b50 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
24b60 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
24b70 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
24b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
24b90 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
24ba0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
24bb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24bc0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
24bd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24be0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
24bf0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
24c00 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
24c10 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
24c20 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
24c30 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24c40 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
24c50 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
24c60 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
24c70 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
24c80 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
24c90 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
24ca0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
24cb0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
24cc0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
24cd0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
24ce0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
24cf0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
24d00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
24d10 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
24d20 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
24d30 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
24d40 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
24d50 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
24d60 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
24d70 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
24d80 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
24d90 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
24da0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
24db0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
24dc0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
24dd0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
24de0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
24df0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
24e00 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
24e10 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
24e20 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e50 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
24e60 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
24e70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24e80 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
24e90 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
24ea0 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
24eb0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
24ec0 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
24ed0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
24ee0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
24ef0 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
24f00 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
24f10 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
24f20 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
24f30 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
24f40 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
24f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
24f60 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
24f70 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
24f80 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
24f90 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
24fa0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
24fb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
24fc0 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
24fd0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
24fe0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
24ff0 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
25000 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
25010 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
25020 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
25030 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
25040 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
25050 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
25060 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
25070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25080 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
25090 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
250a0 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
250b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
250c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
250d0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
250e0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
250f0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
25100 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
25110 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
25120 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
25130 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
25160 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70  t*,u32,Expr*,Exp
25170 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25180 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
25190 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
251a0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
251b0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
251c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
251d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
251e0 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
251f0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
25200 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
25210 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
25220 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
25230 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
25240 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25250 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
25260 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
25270 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
25280 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
25290 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
252a0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
252b0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
252c0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
252d0 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
252e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
252f0 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
25300 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
25310 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
25320 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
25330 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
25340 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
25350 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
25360 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
25370 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
25380 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
25390 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
253a0 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
253b0 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
253c0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57  .LogEst sqlite3W
253d0 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
253e0 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
253f0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
25400 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
25410 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
25420 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
25430 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
25440 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
25450 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
25460 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
25470 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
25480 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
25490 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
254a0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
254b0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
254c0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
254d0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
254e0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
254f0 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
25500 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
25510 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
25520 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
25530 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
25540 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
25550 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
25560 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
25570 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
25580 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
25590 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
255a0 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
255b0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
255c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
255d0 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
255e0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
255f0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
25600 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25610 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
25620 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
25630 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
25640 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
25650 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
25660 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
25670 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
25680 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25690 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
256a0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
256b0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
256c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
256d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
256e0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
256f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
25700 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
25710 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
25720 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
25730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25740 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
25750 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25760 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
25770 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
25780 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
25790 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
257a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
257b0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
257c0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
257d0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
257e0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
257f0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
25800 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25810 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
25820 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
25830 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
25840 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
25850 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25860 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
25870 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
25880 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
25890 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
258a0 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
258b0 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  xpr*, int, u8);.
258c0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
258d0 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
258e0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
258f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
25900 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
25910 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
25920 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
25930 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
25940 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
25950 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
25960 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
25970 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
25980 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  t, int, u8);.#de
25990 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
259a0 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
259b0 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
259c0 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
259d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
259e0 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
259f0 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
25a00 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
25a10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
25a20 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30  _ECEL_REF      0
25a30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72  x04  /* Use Expr
25a40 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
25a50 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
25a60 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
25a70 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
25a80 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25a90 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
25aa0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
25ab0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25ac0 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
25ad0 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
25ae0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
25af0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
25b00 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
25b10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
25b20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
25b30 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
25b40 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
25b50 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
25b60 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
25b70 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
25b80 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
25b90 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
25ba0 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
25bb0 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
25bc0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
25bd0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
25be0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
25bf0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25c00 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
25c10 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
25c20 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
25c30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
25c40 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
25c50 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
25c60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
25c70 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
25c80 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
25c90 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
25ca0 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
25cb0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25cc0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
25cd0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
25ce0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
25cf0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
25d00 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
25d10 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
25d20 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
25d30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
25d40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25d50 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
25d60 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
25d70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25d80 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
25d90 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
25da0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
25db0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
25dc0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
25dd0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
25de0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
25df0 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
25e00 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
25e10 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
25e20 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
25e30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25e40 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
25e50 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  T.void sqlite3Pr
25e60 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
25e70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
25e80 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
25e90 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
25ea0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
25eb0 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
25ec0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25ed0 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
25ee0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
25ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
25f00 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
25f10 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
25f20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
25f30 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
25f40 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
25f50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25f60 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
25f70 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
25f80 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
25f90 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
25fa0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
25fb0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
25fc0 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
25fd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
25fe0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
25ff0 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
26000 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
26010 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
26020 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
26030 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
26040 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
26050 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
26060 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
26070 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
26080 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
26090 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c  rFunction(Expr*,
260a0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
260b0 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
260c0 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
260d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
260e0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
260f0 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  TS.int sqlite3Ex
26100 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65  prContainsSubque
26110 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69  ry(Expr*);.#endi
26120 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  f.int sqlite3Exp
26130 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
26140 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
26150 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
26160 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
26170 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
26180 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
26190 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
261a0 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
261b0 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
261c0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
261d0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
261e0 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
261f0 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
26200 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
26210 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
26220 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
26230 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
26240 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
26250 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
26260 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
26270 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
26280 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
26290 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
262a0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
262b0 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
262c0 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
262d0 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
262e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
262f0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
26300 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
26310 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
26320 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
26330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26350 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
26360 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  t*,int*);.void s
26370 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
26380 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
26390 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
263a0 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
263b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
263c0 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
263d0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
263e0 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
263f0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
26400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26410 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
26420 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
26430 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26440 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
26450 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26460 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
26470 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26480 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
26490 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
264a0 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
264b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
264c0 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
264d0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
264e0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
264f0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
26500 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
26510 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
26520 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
26530 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
26540 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
26550 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
26560 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
26570 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
26580 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
26590 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
265a0 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
265b0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
265c0 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
265d0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
265e0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
265f0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
26600 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
26610 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
26620 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26630 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
26640 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
26650 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26660 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
26670 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
26680 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
26690 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
266a0 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
266b0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
266c0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
266d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
266e0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
266f0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
26700 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
26710 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
26720 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
26730 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
26740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26750 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
26760 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
26770 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
26780 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
26790 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
267a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
267b0 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
267c0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
267d0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
267e0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
267f0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
26800 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
26810 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
26820 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
26830 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
26840 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
26850 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
26860 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
26870 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
26880 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
26890 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
268a0 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
268b0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
268c0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
268d0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268f0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
26900 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
26910 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
26920 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
26930 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
26940 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
26950 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
26960 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26970 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
26980 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
26990 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
269a0 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
269b0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
269c0 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
269d0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
269e0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
269f0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
26a00 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
26a10 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
26a20 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
26a30 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
26a40 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
26a50 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
26a60 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
26a70 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
26aa0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
26ab0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
26ac0 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
26ad0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
26ae0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
26af0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
26b00 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
26b10 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
26b20 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
26b30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26b40 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
26b50 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
26b60 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
26b70 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
26b80 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
26b90 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
26ba0 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
26bb0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
26bc0 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
26bd0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
26be0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c10 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
26c20 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
26c30 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
26c40 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
26c50 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
26c60 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
26c70 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
26c80 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
26c90 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
26ca0 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
26cb0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
26cc0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
26cd0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
26ce0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
26cf0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
26d00 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
26d10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
26d20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
26d30 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
26d40 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
26d50 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
26d60 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
26d70 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
26d80 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
26d90 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
26da0 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
26db0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26dc0 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
26dd0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
26de0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
26df0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
26e00 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
26e10 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
26e20 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
26e30 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
26e40 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
26e50 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
26e60 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
26e70 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
26e80 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
26e90 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
26ea0 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
26eb0 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
26ec0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
26ed0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
26ee0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
26ef0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
26f00 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
26f10 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
26f20 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
26f30 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
26f40 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
26f50 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
26f60 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
26f70 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
26f80 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
26f90 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
26fa0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
26fb0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
26fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
26fd0 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
26fe0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
26ff0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
27000 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
27010 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
27020 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
27030 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
27040 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
27050 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
27060 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
27070 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
27080 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
27090 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
270a0 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
270b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
270c0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
270d0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
270e0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
270f0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
27100 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
27110 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
27120 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
27130 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
27140 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
27150 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
27160 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
27170 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
27180 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
27190 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
271a0 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
271b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
271c0 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
271d0 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
271e0 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
271f0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
27200 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
27210 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
27220 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
27230 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
27240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
27250 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
27260 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
27270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
27280 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
27290 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
272a0 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
272b0 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
272c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
272d0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
272e0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
272f0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
27300 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
27310 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
27320 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
27330 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
27340 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
27350 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27360 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
27370 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
27380 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
27390 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
273a0 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
273b0 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
273c0 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
273d0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
273e0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
273f0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
27400 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
27410 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
27420 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
27430 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
27440 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
27450 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
27460 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
27470 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
27480 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
27490 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
274a0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
274b0 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
274c0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
274d0 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
274e0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
274f0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
27500 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27510 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
27520 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
27530 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
27540 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
27550 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27560 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
27570 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
27580 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
27590 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
275a0 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
275b0 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
275c0 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
275d0 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
275e0 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
275f0 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
27600 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
27610 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
27620 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
27630 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
27640 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
27650 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
27660 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
27670 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
27680 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
27690 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
276a0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
276b0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
276c0 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
276d0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
276e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
276f0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
27700 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
27710 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
27720 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
27730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
27740 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
27750 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
27760 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
27770 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
27780 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
27790 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
277a0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
277b0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
277c0 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
277d0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
277e0 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
277f0 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
27800 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
27810 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
27820 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
27830 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
27840 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
27850 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
27860 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
27870 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
27880 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
27890 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
278a0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
278b0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
278c0 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
278d0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
278e0 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
278f0 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
27900 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
27910 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
27920 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
27930 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
27940 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
27950 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
27960 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
27970 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
27980 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
27990 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
279a0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
279b0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
279c0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
279d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
279e0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
279f0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
27a00 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
27a10 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
27a20 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
27a30 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
27a40 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
27a50 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
27a60 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
27a70 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
27a80 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
27a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
27aa0 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
27ab0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
27ac0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
27ad0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
27ae0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
27af0 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
27b00 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
27b10 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
27b20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
27b30 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
27b40 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
27b50 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
27b60 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
27b70 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
27b80 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
27b90 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63  NEED_ERR_NAME).c
27ba0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
27bb0 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a  e3ErrName(int);.
27bc0 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
27bd0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
27be0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
27bf0 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
27c00 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
27c10 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
27c20 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
27c30 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
27c40 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c   char*,int);.Col
27c50 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63  lSeq *sqlite3Loc
27c60 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  ateCollSeq(Parse
27c70 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
27c80 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c  char*zName);.Col
27c90 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70  lSeq *sqlite3Exp
27ca0 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  rCollSeq(Parse *
27cb0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
27cc0 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  xpr);.Expr *sqli
27cd0 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
27ce0 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  eToken(Parse *pP
27cf0 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  arse, Expr*, con
27d00 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  st Token*, int);
27d10 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
27d20 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69  prAddCollateStri
27d30 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ng(Parse*,Expr*,
27d40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78  const char*);.Ex
27d50 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53  pr *sqlite3ExprS
27d60 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a  kipCollate(Expr*
27d70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
27d80 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  eckCollSeq(Parse
27d90 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a   *, CollSeq *);.
27da0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
27db0 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65  ObjectName(Parse
27dc0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
27dd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
27de0 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71  dbeSetChanges(sq
27df0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69  lite3 *, int);.i
27e00 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  nt sqlite3AddInt
27e10 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
27e20 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  t sqlite3SubInt6
27e30 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
27e40 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
27e50 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
27e60 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
27e70 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
27e80 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e  ITE_ENABLE_8_3_N
27e90 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65  AMES.void sqlite
27ea0 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e  3FileSuffix3(con
27eb0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29  st char*, char*)
27ec0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
27ed0 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
27ee0 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ix3(X,Y).#endif.
27ef0 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
27f00 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
27f10 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76  *z,u8);..const v
27f20 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
27f30 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
27f40 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
27f50 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
27f60 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
27f70 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
27f80 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
27f90 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
27fa0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
27fb0 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
27fd0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
27fe0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
27ff0 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
28000 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
28010 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
28020 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
28030 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
28040 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
28050 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
28060 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
28070 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
28080 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
28090 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
280a0 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
280b0 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
280c0 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
280d0 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
280e0 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
280f0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
28100 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
28110 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28120 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
28130 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
28140 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
28150 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
28160 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68  .extern const ch
28170 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e  ar sqlite3StrBIN
28180 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  ARY[];.extern co
28190 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
281a0 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
281b0 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
281c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
281d0 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
281e0 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
281f0 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
28200 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
28210 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
28220 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
28230 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
28240 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44  ig;.extern FuncD
28250 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75  efHash sqlite3Bu
28260 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a  iltinFunctions;.
28270 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28280 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
28290 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
282a0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
282b0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
282c0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
282d0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
282e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
282f0 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
28300 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
28310 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
28320 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
28330 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
28340 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
28350 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
28360 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
28370 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
28380 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
28390 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
283a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
283b0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
283c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
283d0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
283e0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
283f0 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
28400 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
28410 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
28420 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
28430 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28440 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
28450 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
28460 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
28470 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
28480 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
28490 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
284a0 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
284b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
284c0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
284d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
284e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
284f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
28500 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
28510 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
28520 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
28530 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
28540 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
28550 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
28560 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
28570 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
28580 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
28590 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
285a0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
285b0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
285c0 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
285d0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
285e0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
285f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
28600 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
28610 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
28620 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
28630 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
28640 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
28650 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
28660 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
28670 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
28680 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
28690 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
286a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
286b0 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
286c0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
286d0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
286e0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
286f0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
28700 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
28710 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
28720 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
28730 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
28740 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28750 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
28760 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
28770 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
28780 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
28790 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
287a0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
287b0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
287c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
287d0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
287e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
287f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
28800 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
28810 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
28820 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
28830 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
28840 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
28850 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
28860 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
28870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
28880 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
28890 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
288a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
288b0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
288c0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
288d0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
288e0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
288f0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
28900 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
28910 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
28920 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
28930 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
28940 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
28950 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
28960 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
28970 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
28980 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
28990 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
289a0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
289b0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
289c0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
289d0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
289e0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
289f0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
28a00 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
28a10 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
28a20 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
28a30 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
28a40 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
28a50 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
28a60 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
28a70 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
28a80 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
28a90 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
28aa0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
28ab0 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
28ac0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
28ad0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
28ae0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
28af0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
28b00 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
28b10 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
28b20 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
28b30 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
28b40 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
28b50 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28  sqlite3OomClear(
28b60 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
28b70 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
28b80 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
28b90 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
28ba0 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
28bb0 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
28bc0 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
28bd0 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69  (StrAccum*, sqli
28be0 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  te3*, char*, int
28bf0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28c00 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
28c10 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
28c20 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
28c30 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
28c40 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72  cumAppendAll(Str
28c50 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
28c60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28c70 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41  3AppendChar(StrA
28c80 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b  ccum*,int,char);
28c90 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
28ca0 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
28cb0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
28cc0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
28cd0 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
28ce0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28cf0 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
28d00 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
28d10 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
28d20 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
28d30 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
28d40 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
28d50 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
28d60 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
28d70 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
28d80 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
28d90 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
28da0 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
28db0 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64  nst u8 *);..#ifd
28dc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28dd0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
28de0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
28df0 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  yzeFunctions(voi
28e00 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
28e10 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75  tat4ProbeSetValu
28e20 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c  e(Parse*,Index*,
28e30 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
28e40 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e  ,Expr*,u8,int,in
28e50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28e60 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
28e70 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
28e80 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
28e90 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
28ea0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
28eb0 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
28ec0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
28ed0 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
28ee0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
28ef0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
28f00 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23  ite3_value**);.#
28f10 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
28f20 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
28f30 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
28f40 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64  d parser.*/.void
28f50 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
28f60 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
28f70 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4));.void sqlite
28f80 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
28f90 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
28fa0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
28fb0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
28fc0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
28fd0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
28fe0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
28ff0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
29000 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
29010 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
29020 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
29030 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
29040 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
29050 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
29060 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
29070 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
29080 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
29090 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
290a0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
290b0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
290c0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
290d0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
290e0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
290f0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
29100 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
29110 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
29120 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
29130 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
29140 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
29150 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
29160 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
29170 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
29180 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
29190 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
291a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
291b0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
291c0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
291d0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
291e0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
291f0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
29200 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
29210 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
29220 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
29230 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
29240 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
29250 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
29260 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
29270 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
29280 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
29290 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
292a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
292b0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
292c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
292d0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
292e0 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
292f0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
29300 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
29310 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
29320 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
29330 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
29340 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
29350 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
29360 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
29370 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
29380 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
29390 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
293a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
293b0 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
293c0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
293d0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
293e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
293f0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
29400 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
29410 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
29420 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
29430 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
29440 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
29450 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
29460 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
29470 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
29480 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
29490 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
294a0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
294b0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
294c0 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
294d0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
294e0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
294f0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
29500 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
29510 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
29520 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
29530 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
29540 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
29550 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
29560 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
29570 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
29580 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
29590 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
295a0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
295b0 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
295c0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
295d0 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
295e0 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
295f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
29600 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
29610 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
29620 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
29630 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29640 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
29650 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
29660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
29670 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
29680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
29690 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
296a0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
296b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
296c0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
296d0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
296e0 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
296f0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
29700 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
29710 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
29720 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
29730 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
29740 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
29750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
29760 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
29770 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
29780 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
29790 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
297a0 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
297b0 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
297c0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
297d0 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
297e0 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
297f0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
29800 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
29810 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
29820 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
29830 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
29840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
29850 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
29860 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
29870 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
29880 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
29890 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
298a0 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
298b0 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
298c0 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
298d0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
298e0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
298f0 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
29900 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
29910 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
29920 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
29930 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
29940 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
29950 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
29960 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
29970 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
29980 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
29990 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
299a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
299b0 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
299c0 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
299d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
299e0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
299f0 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
29a00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
29a10 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
29a20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
29a30 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
29a40 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
29a50 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
29a60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29a70 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
29a80 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
29a90 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
29aa0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
29ab0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
29ac0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
29ad0 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
29ae0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
29af0 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
29b00 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
29b10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
29b20 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
29b30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
29b40 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
29b50 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
29b60 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
29b70 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
29b80 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
29b90 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
29ba0 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
29bb0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
29bc0 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
29bd0 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
29be0 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
29bf0 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
29c00 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
29c10 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
29c20 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
29c30 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
29c40 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
29c50 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
29c60 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
29c70 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
29c80 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
29c90 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
29ca0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
29cb0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
29cc0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
29cd0 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
29ce0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
29cf0 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
29d00 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
29d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
29d20 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
29d30 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29d40 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
29d50 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
29d60 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
29d70 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
29d80 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
29d90 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
29da0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
29db0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
29dc0 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
29dd0 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
29de0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
29df0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
29e00 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
29e10 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
29e20 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
29e30 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
29e40 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
29e50 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
29e60 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
29e70 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
29e80 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
29e90 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
29ea0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
29eb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29ec0 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
29ed0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
29ee0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
29ef0 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
29f00 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
29f10 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
29f20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
29f30 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
29f40 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
29f50 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
29f60 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
29f70 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
29f80 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
29f90 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
29fa0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
29fb0 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
29fc0 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
29fd0 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
29fe0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29ff0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2a000 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2a010 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2a020 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2a030 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2a040 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2a050 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2a060 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2a070 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2a080 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2a090 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2a0a0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2a0b0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2a0c0 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2a0d0 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2a0e0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2a0f0 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2a100 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2a110 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2a120 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2a130 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2a140 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2a150 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
2a160 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
2a170 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
2a180 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
2a190 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
2a1a0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2a1b0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2a1c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
2a1d0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
2a1e0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
2a1f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
2a200 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
2a210 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2a220 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2a230 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
2a240 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
2a250 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
2a260 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2a270 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
2a280 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
2a290 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
2a2a0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2a2b0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
2a2c0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
2a2d0 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
2a2e0 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
2a2f0 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
2a300 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2a310 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
2a320 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2a330 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
2a340 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2a350 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
2a360 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2a370 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
2a380 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2a390 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
2a3a0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
2a3b0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
2a3c0 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
2a3d0 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
2a3e0 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
2a3f0 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
2a400 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
2a410 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2a420 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
2a430 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
2a440 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
2a450 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
2a460 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
2a470 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
2a480 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
2a490 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
2a4a0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
2a4b0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
2a4c0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
2a4d0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
2a4e0 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
2a4f0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
2a500 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
2a510 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
2a520 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2a530 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2a540 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2a550 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2a560 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2a570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2a580 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2a590 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66  3_vfs *);.#ifdef
2a5a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
2a5b0 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
2a5c0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2a5d0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
2a5e0 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ile *);.#endif..
2a5f0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2a600 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c  alIsInMemory(sql
2a610 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76  ite3_file *p);.v
2a620 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
2a630 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2a640 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64  3_file *);..void
2a650 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
2a660 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61  eightAndFlags(Pa
2a670 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2a680 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54  r *p);.#if SQLIT
2a690 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
2a6a0 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  >0.  int sqlite3
2a6b0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2a6c0 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
2a6d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2a6e0 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
2a6f0 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
2a700 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
2a710 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
2a720 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
2a730 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
2a740 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
2a750 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
2a760 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
2a770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
2a780 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
2a790 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2a7a0 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
2a7b0 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
2a7c0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
2a7d0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
2a7e0 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
2a7f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2a800 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
2a810 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
2a820 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2a830 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
2a840 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
2a850 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2a860 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
2a870 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
2a880 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2a890 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
2a8a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2a8b0 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
2a8c0 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
2a8d0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2a8e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
2a8f0 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
2a900 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
2a910 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
2a920 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
2a930 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
2a940 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
2a950 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
2a960 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
2a970 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
2a980 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
2a990 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
2a9a0 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
2a9b0 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
2a9c0 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
2a9d0 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
2a9e0 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
2a9f0 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
2aa00 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
2aa10 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
2aa20 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
2aa30 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
2aa40 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
2aa50 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
2aa60 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
2aa70 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
2aa80 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
2aa90 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
2aaa0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2aab0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
2aac0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2aad0 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
2aae0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
2aaf0 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
2ab00 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
2ab10 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
2ab20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
2ab30 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
2ab40 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
2ab50 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
2ab60 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
2ab70 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
2ab80 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
2ab90 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2aba0 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
2abb0 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
2abc0 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
2abd0 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
2abe0 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
2abf0 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
2ac00 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
2ac10 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
2ac20 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
2ac30 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
2ac40 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2ac50 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2ac60 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
2ac70 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2ac80 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2ac90 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2aca0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2acb0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2acc0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
2acd0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2ace0 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
2acf0 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
2ad00 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
2ad10 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
2ad20 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2ad30 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
2ad40 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
2ad50 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2ad60 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2ad70 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2ad80 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2ad90 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2ada0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
2adb0 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
2adc0 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
2add0 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
2ade0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
2adf0 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
2ae00 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2ae10 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
2ae20 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
2ae30 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
2ae40 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
2ae50 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
2ae60 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
2ae70 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
2ae80 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
2ae90 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
2aea0 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
2aeb0 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
2aec0 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
2aed0 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
2aee0 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
2aef0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
2af00 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
2af10 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
2af20 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
2af30 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2af40 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
2af50 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
2af60 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
2af70 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
2af80 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
2af90 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2afa0 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
2afb0 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
2afc0 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
2afd0 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
2afe0 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
2aff0 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
2b000 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
2b010 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
2b020 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
2b030 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
2b040 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
2b050 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
2b060 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
2b070 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2b080 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
2b090 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2b0a0 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
2b0b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2b0c0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
2b0d0 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
2b0e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b0f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2b100 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
2b110 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
2b120 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2b130 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
2b140 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2b150 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
2b160 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
2b170 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
2b180 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
2b190 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
2b1a0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
2b1b0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2b1c0 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
2b1d0 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
2b1e0 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
2b1f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2b200 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
2b210 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
2b220 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
2b230 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
2b240 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
2b250 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
2b260 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 23 69  locations */..#i
2b270 66 20 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  f (SQLITE_ENABLE
2b280 5f 41 50 50 4c 45 5f 53 50 49 3e 30 29 20 26 26  _APPLE_SPI>0) &&
2b290 20 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45   defined(__APPLE
2b2a0 5f 5f 29 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  __)../*.** An in
2b2b0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
2b2c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
2b2d0 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
2b2e0 64 20 74 68 65 20 70 72 6f 63 65 73 73 20 49 44  d the process ID
2b2f0 0a 2a 2a 20 61 6e 64 20 72 65 74 75 72 6e 2d 62  .** and return-b
2b300 79 2d 72 65 66 65 72 65 6e 63 65 20 6c 6f 63 6b  y-reference lock
2b310 73 74 61 74 65 20 76 61 6c 75 65 2e 20 20 54 68  state value.  Th
2b320 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c  e SQLITE_FCNTL_L
2b330 4f 43 4b 53 54 41 54 45 5f 50 49 44 0a 2a 2a 20  OCKSTATE_PID.** 
2b340 72 65 71 75 69 72 65 73 20 74 68 65 20 34 74 68  requires the 4th
2b350 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
2b360 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
2b370 6c 20 74 6f 20 62 65 20 61 20 70 6f 69 6e 74 65  l to be a pointe
2b380 72 20 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  r to an.** insta
2b390 6e 63 65 20 6f 66 20 4c 6f 63 6b 73 74 61 74 65  nce of Lockstate
2b3a0 50 49 44 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  PID initialized 
2b3b0 77 69 74 68 20 61 20 4c 6f 63 6b 73 74 61 74 65  with a Lockstate
2b3c0 50 49 44 2e 70 69 64 20 76 61 6c 75 65 20 65 71  PID.pid value eq
2b3d0 75 61 6c 0a 2a 2a 20 74 6f 20 61 20 70 72 6f 63  ual.** to a proc
2b3e0 65 73 73 20 49 44 20 74 6f 20 62 65 20 74 65 73  ess ID to be tes
2b3f0 74 65 64 2c 20 6f 72 20 74 68 65 20 73 70 65 63  ted, or the spec
2b400 69 61 6c 20 76 61 6c 75 65 20 53 51 4c 49 54 45  ial value SQLITE
2b410 5f 4c 4f 43 4b 53 54 41 54 45 5f 41 4e 59 50 49  _LOCKSTATE_ANYPI
2b420 44 0a 2a 2a 20 54 68 65 20 4c 6f 63 6b 73 74 61  D.** The Locksta
2b430 74 65 2e 73 74 61 74 65 20 76 61 6c 75 65 20 69  te.state value i
2b440 73 20 61 6c 77 61 79 73 20 73 65 74 20 74 6f 20  s always set to 
2b450 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
2b460 77 69 6e 67 20 76 61 6c 75 65 73 0a 2a 2a 20 77  wing values.** w
2b470 68 65 6e 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  hen sqlite3_file
2b480 5f 63 6f 6e 74 72 6f 6c 20 72 65 74 75 72 6e 73  _control returns
2b490 3a 0a 2a 2a 20 0a 2a 2a 20 20 20 53 51 4c 49 54  :.** .**   SQLIT
2b4a0 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 46 46 20  E_LOCKSTATE_OFF 
2b4b0 20 20 20 6e 6f 20 61 63 74 69 76 65 20 73 71 6c     no active sql
2b4c0 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d  ite file locks m
2b4d0 61 74 63 68 20 74 68 65 20 73 70 65 63 69 66 69  atch the specifi
2b4e0 65 64 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49  ed pid.**   SQLI
2b4f0 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e 20  TE_LOCKSTATE_ON 
2b500 20 20 20 20 61 63 74 69 76 65 20 73 71 6c 69 74      active sqlit
2b510 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d 61 74  e file locks mat
2b520 63 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ch the specified
2b530 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49 54 45   pid.**   SQLITE
2b540 5f 4c 4f 43 4b 53 54 41 54 45 5f 4e 4f 54 41 44  _LOCKSTATE_NOTAD
2b550 42 20 70 61 74 68 20 70 6f 69 6e 74 73 20 74 6f  B path points to
2b560 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20   a file that is 
2b570 6e 6f 74 20 61 6e 20 73 71 6c 69 74 65 20 64 62  not an sqlite db
2b580 20 66 69 6c 65 0a 2a 2a 20 20 20 53 51 4c 49 54   file.**   SQLIT
2b590 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 45 52 52 4f  E_LOCKSTATE_ERRO
2b5a0 52 20 20 70 61 74 68 20 77 61 73 20 6e 6f 74 20  R  path was not 
2b5b0 76 61 69 6c 64 20 6f 72 20 77 61 73 20 75 6e 72  vaild or was unr
2b5c0 65 61 64 61 62 6c 65 0a 2a 2f 0a 74 79 70 65 64  eadable.*/.typed
2b5d0 65 66 20 73 74 72 75 63 74 20 4c 6f 63 6b 73 74  ef struct Lockst
2b5e0 61 74 65 50 49 44 20 4c 6f 63 6b 73 74 61 74 65  atePID Lockstate
2b5f0 50 49 44 3b 0a 73 74 72 75 63 74 20 4c 6f 63 6b  PID;.struct Lock
2b600 73 74 61 74 65 50 49 44 20 7b 0a 20 20 70 69 64  statePID {.  pid
2b610 5f 74 20 70 69 64 3b 20 20 20 20 20 20 20 20 20  _t pid;         
2b620 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 63 65          /* Proce
2b630 73 73 20 49 44 20 74 6f 20 74 65 73 74 20 2a 2f  ss ID to test */
2b640 0a 20 20 69 6e 74 20 73 74 61 74 65 3b 20 20 20  .  int state;   
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b660 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   The state of th
2b670 65 20 6c 6f 63 6b 20 28 72 65 74 75 72 6e 20 76  e lock (return v
2b680 61 6c 75 65 29 20 2a 2f 0a 7d 3b 0a 0a 23 65 6e  alue) */.};..#en
2b690 64 69 66 20 2f 2a 20 28 53 51 4c 49 54 45 5f 45  dif /* (SQLITE_E
2b6a0 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e  NABLE_APPLE_SPI>
2b6b0 30 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  0) && defined(__
2b6c0 41 50 50 4c 45 5f 5f 29 20 2a 2f 0a 0a 2f 2a 0a  APPLE__) */../*.
2b6d0 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
2b6e0 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
2b6f0 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
2b700 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
2b710 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
2b720 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
2b730 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
2b740 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
2b750 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
2b760 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
2b770 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
2b780 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2b790 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
2b7a0 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
2b7b0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
2b7c0 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
2b7d0 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
2b7e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69  );.#endif..#endi
2b7f0 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
2b800 48 5f 20 2a 2f 0a                                H_ */.