/ Hex Artifact Content
Login

Artifact 8a3ca5847b3cbd0ee3333f5615e3db049f550727:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  INT_H_../*.** Ma
01e0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 72 61 6e  ke sure that ran
01f0: 64 5f 73 28 29 20 69 73 20 61 76 61 69 6c 61 62  d_s() is availab
0200: 6c 65 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79  le on Windows sy
0210: 73 74 65 6d 73 20 77 69 74 68 20 4d 53 56 43 20  stems with MSVC 
0220: 32 30 30 35 0a 2a 2a 20 6f 72 20 68 69 67 68 65  2005.** or highe
0230: 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  r..*/.#if define
0240: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
0250: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
0260: 20 64 65 66 69 6e 65 20 5f 43 52 54 5f 52 41 4e   define _CRT_RAN
0270: 44 5f 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D_S.#endif../*.*
0280: 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 68 65  * Include the he
0290: 61 64 65 72 20 66 69 6c 65 20 75 73 65 64 20 74  ader file used t
02a0: 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
02b0: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 73  compiler options
02c0: 20 66 6f 72 20 4d 53 56 43 2e 0a 2a 2a 20 54 68   for MSVC..** Th
02d0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 64 6f 6e  is should be don
02e0: 65 20 66 69 72 73 74 20 73 6f 20 74 68 61 74 20  e first so that 
02f0: 69 74 20 63 61 6e 20 73 75 63 63 65 73 73 66 75  it can successfu
0300: 6c 6c 79 20 70 72 65 76 65 6e 74 20 73 70 75 72  lly prevent spur
0310: 69 6f 75 73 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  ious.** compiler
0320: 20 77 61 72 6e 69 6e 67 73 20 64 75 65 20 74 6f   warnings due to
0330: 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 74   subsequent cont
0340: 65 6e 74 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ent in this file
0350: 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
0360: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 69 6e 63  .** that are inc
0370: 6c 75 64 65 64 20 62 79 20 74 68 69 73 20 66 69  luded by this fi
0380: 6c 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  le..*/.#include 
0390: 22 6d 73 76 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  "msvc.h"../*.** 
03a0: 53 70 65 63 69 61 6c 20 73 65 74 75 70 20 66 6f  Special setup fo
03b0: 72 20 56 78 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e  r VxWorks.*/.#in
03c0: 63 6c 75 64 65 20 22 76 78 77 6f 72 6b 73 2e 68  clude "vxworks.h
03d0: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 23  "../*.** These #
03e0: 64 65 66 69 6e 65 73 20 73 68 6f 75 6c 64 20 65  defines should e
03f0: 6e 61 62 6c 65 20 3e 32 47 42 20 66 69 6c 65 20  nable >2GB file 
0400: 73 75 70 70 6f 72 74 20 6f 6e 20 50 4f 53 49 58  support on POSIX
0410: 20 69 66 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72   if the.** under
0420: 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20  lying operating 
0430: 73 79 73 74 65 6d 20 73 75 70 70 6f 72 74 73 20  system supports 
0440: 69 74 2e 20 20 49 66 20 74 68 65 20 4f 53 20 6c  it.  If the OS l
0450: 61 63 6b 73 0a 2a 2a 20 6c 61 72 67 65 20 66 69  acks.** large fi
0460: 6c 65 20 73 75 70 70 6f 72 74 2c 20 6f 72 20 69  le support, or i
0470: 66 20 74 68 65 20 4f 53 20 69 73 20 77 69 6e 64  f the OS is wind
0480: 6f 77 73 2c 20 74 68 65 73 65 20 73 68 6f 75 6c  ows, these shoul
0490: 64 20 62 65 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a  d be no-ops..**.
04a0: 2a 2a 20 54 69 63 6b 65 74 20 23 32 37 33 39 3a  ** Ticket #2739:
04b0: 20 20 54 68 65 20 5f 4c 41 52 47 45 46 49 4c 45    The _LARGEFILE
04c0: 5f 53 4f 55 52 43 45 20 6d 61 63 72 6f 20 6d 75  _SOURCE macro mu
04d0: 73 74 20 61 70 70 65 61 72 20 62 65 66 6f 72 65  st appear before
04e0: 20 61 6e 79 0a 2a 2a 20 73 79 73 74 65 6d 20 23   any.** system #
04f0: 69 6e 63 6c 75 64 65 73 2e 20 20 48 65 6e 63 65  includes.  Hence
0500: 2c 20 74 68 69 73 20 62 6c 6f 63 6b 20 6f 66 20  , this block of 
0510: 63 6f 64 65 20 6d 75 73 74 20 62 65 20 74 68 65  code must be the
0520: 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 63   very first.** c
0530: 6f 64 65 20 69 6e 20 61 6c 6c 20 73 6f 75 72 63  ode in all sourc
0540: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c  e files..**.** L
0550: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
0560: 74 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  t can be disable
0570: 64 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53 51  d using the -DSQ
0580: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
0590: 20 73 77 69 74 63 68 0a 2a 2a 20 6f 6e 20 74 68   switch.** on th
05a0: 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61  e compiler comma
05b0: 6e 64 20 6c 69 6e 65 2e 20 20 54 68 69 73 20 69  nd line.  This i
05c0: 73 20 6e 65 63 65 73 73 61 72 79 20 69 66 20 79  s necessary if y
05d0: 6f 75 20 61 72 65 20 63 6f 6d 70 69 6c 69 6e 67  ou are compiling
05e0: 0a 2a 2a 20 6f 6e 20 61 20 72 65 63 65 6e 74 20  .** on a recent 
05f0: 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64  machine (ex: Red
0600: 20 48 61 74 20 37 2e 32 29 20 62 75 74 20 79 6f   Hat 7.2) but yo
0610: 75 20 77 61 6e 74 20 79 6f 75 72 20 63 6f 64 65  u want your code
0620: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61   to work.** on a
0630: 6e 20 6f 6c 64 65 72 20 6d 61 63 68 69 6e 65 20  n older machine 
0640: 28 65 78 3a 20 52 65 64 20 48 61 74 20 36 2e 30  (ex: Red Hat 6.0
0650: 29 2e 20 20 49 66 20 79 6f 75 20 63 6f 6d 70 69  ).  If you compi
0660: 6c 65 20 6f 6e 20 52 65 64 20 48 61 74 20 37 2e  le on Red Hat 7.
0670: 32 0a 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 69  2.** without thi
0680: 73 20 6f 70 74 69 6f 6e 2c 20 4c 46 53 20 69 73  s option, LFS is
0690: 20 65 6e 61 62 6c 65 2e 20 20 42 75 74 20 4c 46   enable.  But LF
06a0: 53 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  S does not exist
06b0: 20 69 6e 20 74 68 65 20 6b 65 72 6e 65 6c 0a 2a   in the kernel.*
06c0: 2a 20 69 6e 20 52 65 64 20 48 61 74 20 36 2e 30  * in Red Hat 6.0
06d0: 2c 20 73 6f 20 74 68 65 20 63 6f 64 65 20 77 6f  , so the code wo
06e0: 6e 27 74 20 77 6f 72 6b 2e 20 20 48 65 6e 63 65  n't work.  Hence
06f0: 2c 20 66 6f 72 20 6d 61 78 69 6d 75 6d 20 62 69  , for maximum bi
0700: 6e 61 72 79 0a 2a 2a 20 70 6f 72 74 61 62 69 6c  nary.** portabil
0710: 69 74 79 20 79 6f 75 20 73 68 6f 75 6c 64 20 6f  ity you should o
0720: 6d 69 74 20 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54  mit LFS..**.** T
0730: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
0740: 67 72 61 70 68 20 77 61 73 20 77 72 69 74 74 65  graph was writte
0750: 6e 20 69 6e 20 32 30 30 35 2e 20 20 28 54 68 69  n in 2005.  (Thi
0760: 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 77  s paragraph is w
0770: 72 69 74 74 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30  ritten.** on 200
0780: 38 2d 31 31 2d 32 38 2e 29 20 54 68 65 73 65 20  8-11-28.) These 
0790: 64 61 79 73 2c 20 61 6c 6c 20 4c 69 6e 75 78 20  days, all Linux 
07a0: 6b 65 72 6e 65 6c 73 20 73 75 70 70 6f 72 74 20  kernels support 
07b0: 6c 61 72 67 65 20 66 69 6c 65 73 2c 20 73 6f 0a  large files, so.
07c0: 2a 2a 20 79 6f 75 20 73 68 6f 75 6c 64 20 70 72  ** you should pr
07d0: 6f 62 61 62 6c 79 20 6c 65 61 76 65 20 4c 46 53  obably leave LFS
07e0: 20 65 6e 61 62 6c 65 64 2e 20 20 42 75 74 20 73   enabled.  But s
07f0: 6f 6d 65 20 65 6d 62 65 64 64 65 64 20 70 6c 61  ome embedded pla
0800: 74 66 6f 72 6d 73 20 6d 69 67 68 74 0a 2a 2a 20  tforms might.** 
0810: 6c 61 63 6b 20 4c 46 53 20 69 6e 20 77 68 69 63  lack LFS in whic
0820: 68 20 63 61 73 65 20 74 68 65 20 53 51 4c 49 54  h case the SQLIT
0830: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 6d 61  E_DISABLE_LFS ma
0840: 63 72 6f 20 6d 69 67 68 74 20 73 74 69 6c 6c 20  cro might still 
0850: 62 65 20 75 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a  be useful..**.**
0860: 20 53 69 6d 69 6c 61 72 20 69 73 20 74 72 75 65   Similar is true
0870: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2e 20 20   for Mac OS X.  
0880: 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  LFS is only supp
0890: 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20 4f 53 20  orted on Mac OS 
08a0: 58 20 39 20 61 6e 64 20 6c 61 74 65 72 2e 0a 2a  X 9 and later..*
08b0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
08c0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
08d0: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
08e0: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
08f0: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0900: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0910: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0920: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0930: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0940: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0950: 0a 0a 2f 2a 20 57 68 61 74 20 76 65 72 73 69 6f  ../* What versio
0960: 6e 20 6f 66 20 47 43 43 20 69 73 20 62 65 69 6e  n of GCC is bein
0970: 67 20 75 73 65 64 2e 20 20 30 20 6d 65 61 6e 73  g used.  0 means
0980: 20 47 43 43 20 69 73 20 6e 6f 74 20 62 65 69 6e   GCC is not bein
0990: 67 20 75 73 65 64 20 2a 2f 0a 23 69 66 64 65 66  g used */.#ifdef
09a0: 20 5f 5f 47 4e 55 43 5f 5f 0a 23 20 64 65 66 69   __GNUC__.# defi
09b0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
09c0: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
09d0: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
09e0: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
09f0: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
0a00: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
0a10: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
0a20: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
0a30: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
0a40: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
0a50: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
0a60: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
0a70: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
0a80: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
0a90: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
0aa0: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
0ab0: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
0ac0: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
0ad0: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
0ae0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
0af0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
0b00: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
0b10: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
0b20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
0b30: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
0b40: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
0b50: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
0b60: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
0b70: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
0b80: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
0b90: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
0ba0: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0bb0: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
0bc0: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
0bd0: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
0be0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
0bf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
0c00: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
0c10: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
0c20: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
0c30: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
0c40: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
0c50: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
0c60: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
0c70: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
0c80: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
0c90: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
0ca0: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
0cb0: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
0cc0: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
0cd0: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
0ce0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
0cf0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
0d00: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
0d10: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
0d20: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
0d30: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
0d40: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
0d50: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
0d60: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
0d70: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
0d80: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
0d90: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
0da0: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
0db0: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
0dc0: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
0dd0: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
0de0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
0df0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
0e00: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
0e10: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
0e20: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
0e30: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0e40: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
0e50: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
0e60: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
0e70: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
0e80: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
0e90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
0ea0: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
0eb0: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
0ec0: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
0ed0: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
0ee0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
0ef0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
0f00: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
0f10: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
0f20: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
0f30: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
0f40: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
0f50: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
0f60: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
0f70: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
0f80: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
0f90: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
0fa0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
0fb0: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0fc0: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
0fd0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
0fe0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
0ff0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
1000: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
1010: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
1020: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
1030: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1040: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1050: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1060: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1070: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1080: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1090: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
10a0: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
10b0: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
10c0: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
10d0: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
10e0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
10f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
1100: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
1110: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
1120: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
1130: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1140: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1150: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1160: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1170: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1180: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1190: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
11a0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
11b0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
11c0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
11d0: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
11e0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
11f0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1200: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1210: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1220: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1230: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1240: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1250: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1260: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1270: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1280: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1290: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
12a0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
12b0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
12c0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
12d0: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
12e0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
12f0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1300: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1310: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1320: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1330: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1340: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1350: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1360: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1370: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1380: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1390: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
13a0: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
13b0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
13c0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13d0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
13e0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
13f0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1400: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1410: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1420: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1430: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1440: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1450: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1460: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1480: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1490: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
14a0: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
14b0: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
14c0: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
14d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
14e0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
14f0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1500: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1510: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1520: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1530: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1540: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1550: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1560: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1570: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1580: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1590: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
15a0: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
15b0: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
15c0: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
15d0: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
15e0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
15f0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1600: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1610: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1620: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1630: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1640: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1650: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1660: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1670: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1680: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1690: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
16a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
16b0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
16c0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
16d0: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
16e0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
16f0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1700: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1710: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1720: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1730: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1740: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
1750: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
1760: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1770: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1780: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1790: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
17a0: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
17b0: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
17c0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
17d0: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
17e0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
17f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1800: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
1810: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
1820: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
1830: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
1840: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
1850: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
1860: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1870: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1880: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1890: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
18a0: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
18b0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
18c0: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
18d0: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
18e0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1900: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
1910: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
1920: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
1930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1940: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1950: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
1960: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1970: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1980: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1990: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
19a0: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
19b0: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
19c0: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
19d0: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
19e0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
19f0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1a00: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
1a10: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
1a20: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
1a30: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
1a40: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
1a50: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
1a60: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1a70: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1a80: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1a90: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1aa0: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1ab0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
1ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
1ad0: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
1ae0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
1af0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
1b00: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
1b10: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
1b20: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
1b30: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
1b40: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
1b50: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
1b60: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1b70: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1b80: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
1b90: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
1ba0: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
1bb0: 33 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  300.#    if !def
1bc0: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
1bd0: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
1be0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
1bf0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1c00: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
1c10: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
1c20: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
1c30: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
1c40: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
1c50: 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74 65  insic(_ReadWrite
1c60: 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65 6c  Barrier).#    el
1c70: 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64  se.#      includ
1c80: 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a  e <cmnintrin.h>.
1c90: 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65 6e  #    endif.#  en
1ca0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  dif.#endif../*.*
1cb0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52  * The SQLITE_THR
1cc0: 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75  EADSAFE macro mu
1cd0: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73  st be defined as
1ce0: 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20   0, 1, or 2..** 
1cf0: 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20  0 means mutexes 
1d00: 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20  are permanently 
1d10: 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20  disable and the 
1d20: 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72  library is never
1d30: 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20  .** threadsafe. 
1d40: 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62   1 means the lib
1d50: 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a  rary is serializ
1d60: 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ed which is the 
1d70: 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c  highest.** level
1d80: 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79   of threadsafety
1d90: 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  2 means the l
1da0: 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74  ibrary is multit
1db0: 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70  hreaded - multip
1dc0: 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61  le.** threads ca
1dd0: 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20  n use SQLite as 
1de0: 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74  long as no two t
1df0: 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73  hreads try to us
1e00: 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61  e the same.** da
1e10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1e20: 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  n at the same ti
1e30: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20  me..**.** Older 
1e40: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1e50: 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f  te used an optio
1e60: 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d  nal THREADSAFE m
1e70: 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70  acro..** We supp
1e80: 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67  ort that for leg
1e90: 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  acy..*/.#if !def
1ea0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45  ined(SQLITE_THRE
1eb0: 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66  ADSAFE).# if def
1ec0: 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29  ined(THREADSAFE)
1ed0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
1ee0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1ef0: 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a  READSAFE.# else.
1f00: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1f10: 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f  E_THREADSAFE 1 /
1f20: 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32  * IMP: R-07272-2
1f30: 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a  2309 */.# endif.
1f40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f  #endif../*.** Po
1f50: 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74  wersafe overwrit
1f60: 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75  e is on by defau
1f70: 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20  lt.  But can be 
1f80: 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67  turned off using
1f90: 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45  .** the -DSQLITE
1fa0: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1fb0: 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c  RITE=0 command-l
1fc0: 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23  ine option..*/.#
1fd0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f  ifndef SQLITE_PO
1fe0: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1ff0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
2000: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
2010: 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a  WRITE 1.#endif..
2020: 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f  /*.** EVIDENCE-O
2030: 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32  F: R-25715-37072
2040: 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   Memory allocati
2050: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72  on statistics ar
2060: 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20  e enabled by.** 
2070: 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53  default unless S
2080: 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
2090: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45  d with SQLITE_DE
20a0: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d  FAULT_MEMSTATUS=
20b0: 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61  0 in.** which ca
20c0: 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  se memory alloca
20d0: 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  tion statistics 
20e0: 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20  are disabled by 
20f0: 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20  default..*/.#if 
2100: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2110: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
2120: 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  S).# define SQLI
2130: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
2140: 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  ATUS 1.#endif../
2150: 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65  *.** Exactly one
2160: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2170: 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65  g macros must be
2180: 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65   defined in orde
2190: 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20  r to.** specify 
21a0: 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c  which memory all
21b0: 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65  ocation subsyste
21c0: 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  m to use..**.** 
21d0: 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45      SQLITE_SYSTE
21e0: 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  M_MALLOC        
21f0: 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20    // Use normal 
2200: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
2210: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49  **     SQLITE_WI
2220: 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  N32_MALLOC      
2230: 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33       // Use Win3
2240: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50  2 native heap AP
2250: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
2260: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  ZERO_MALLOC     
2270: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20         // Use a 
2280: 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74  stub allocator t
2290: 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73  hat always fails
22a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d  .**     SQLITE_M
22b0: 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20  EMDEBUG         
22c0: 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69        // Debuggi
22d0: 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79  ng version of sy
22e0: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
22f0: 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20  .** On Windows, 
2300: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49  if the SQLITE_WI
2310: 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44  N32_MALLOC_VALID
2320: 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ATE macro is def
2330: 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20  ined and the.** 
2340: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69  assert() macro i
2350: 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20  s enabled, each 
2360: 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69  call into the Wi
2370: 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20  n32 native heap 
2380: 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c  subsystem.** wil
2390: 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69  l cause HeapVali
23a0: 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65  date to be calle
23b0: 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69  d.  If heap vali
23c0: 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61  dation should fa
23d0: 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74  il, an.** assert
23e0: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67  ion will be trig
23f0: 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  gered..**.** If 
2400: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
2410: 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74  e are defined, t
2420: 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53  hen set SQLITE_S
2430: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a  YSTEM_MALLOC as.
2440: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  ** the default..
2450: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
2460: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2470: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2480: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2490: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
24a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
24b0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
24c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
24d0: 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72  EMDEBUG)>1.# err
24e0: 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20  or "Two or more 
24f0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
2500: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
2510: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
2520: 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65  ons\. are define
2530: 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e  d but at most on
2540: 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20  e is allowed:\. 
2550: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2560: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e  LLOC, SQLITE_WIN
2570: 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  32_MALLOC, SQLIT
2580: 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51  E_MEMDEBUG,\. SQ
2590: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
25a0: 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ".#endif.#if def
25b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
25c0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
25d0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
25e0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
25f0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
2600: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
2610: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2620: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d  LITE_MEMDEBUG)==
2630: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
2640: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2650: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2660: 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  If SQLITE_MALLOC
2670: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e  _SOFT_LIMIT is n
2680: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72  ot zero, then tr
2690: 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a  y to keep the.**
26a0: 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79   sizes of memory
26b0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c   allocations bel
26c0: 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68  ow this value wh
26d0: 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f  ere possible..*/
26e0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26f0: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2700: 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65  _LIMIT).# define
2710: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
2720: 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23  OFT_LIMIT 1024.#
2730: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20  endif../*.** We 
2740: 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f  need to define _
2750: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20  XOPEN_SOURCE as 
2760: 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72  follows in order
2770: 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65   to enable.** re
2780: 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20  cursive mutexes 
2790: 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73  on most Unix sys
27a0: 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28  tems and fchmod(
27b0: 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a  ) on OpenBSD..**
27c0: 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52   But _XOPEN_SOUR
27d0: 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73  CE define causes
27e0: 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61   problems for Ma
27f0: 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a  c OS X, so omit.
2800: 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64  ** it..*/.#if !d
2810: 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f  efined(_XOPEN_SO
2820: 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65  URCE) && !define
2830: 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26  d(__DARWIN__) &&
2840: 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   !defined(__APPL
2850: 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f  E__).#  define _
2860: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30  XOPEN_SOURCE 600
2870: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e  .#endif../*.** N
2880: 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45  DEBUG and SQLITE
2890: 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73  _DEBUG are oppos
28a0: 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64  ites.  It should
28b0: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
28c0: 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28  that.** defined(
28d0: 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65  NDEBUG)==!define
28e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e  d(SQLITE_DEBUG).
28f0: 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74    If this is not
2900: 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c   currently true,
2910: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65  .** make it true
2920: 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20   by defining or 
2930: 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55  undefining NDEBU
2940: 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67  G..**.** Setting
2950: 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68   NDEBUG makes th
2960: 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61  e code smaller a
2970: 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73  nd faster by dis
2980: 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73  abling the.** as
2990: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
29a0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
29b0: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
29c0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
29d0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
29e0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
29f0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
2a00: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
2a10: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
2a20: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
2a30: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
2a40: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
2a50: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
2a60: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
2a70: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
2a80: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
2a90: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2aa0: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2ab0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2ac0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2ad0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2ae0: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2af0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2b00: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
2b10: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2b20: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
2b30: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
2b40: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2b50: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2b60: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2b70: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2b80: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2b90: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2ba0: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2bb0: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2bc0: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2bd0: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2be0: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2bf0: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2c00: 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72  n.** doing cover
2c10: 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65  age testing, the
2c20: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64   condition insid
2c30: 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  e the argument t
2c40: 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20  o.** testcase() 
2c50: 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65  must be evaluate
2c60: 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20  d both true and 
2c70: 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74  false in order t
2c80: 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72  o.** get full br
2c90: 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20  anch coverage.  
2ca0: 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d  The testcase() m
2cb0: 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64  acro is inserted
2cc0: 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75  .** to help ensu
2cd0: 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74  re adequate test
2ce0: 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61   coverage in pla
2cf0: 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65  ces where simple
2d00: 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65  .** condition/de
2d10: 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20  cision coverage 
2d20: 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20  is inadequate.  
2d30: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73  For example, tes
2d40: 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62  tcase().** can b
2d50: 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  e used to make s
2d60: 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c  ure boundary val
2d70: 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20  ues are tested. 
2d80: 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20   For.** bitmask 
2d90: 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28  tests, testcase(
2da0: 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ) can be used to
2db0: 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20   make sure each 
2dc0: 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66  bit.** is signif
2dd0: 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61  icant and used a
2de0: 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f  t least once.  O
2df0: 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  n switch stateme
2e00: 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c  nts.** where mul
2e10: 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74  tiple cases go t
2e20: 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b  o the same block
2e30: 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61   of code, testca
2e40: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75  se().** can insu
2e50: 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65  re that all case
2e60: 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e  s are evaluated.
2e70: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
2e80: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2e90: 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
2ea0: 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a  3Coverage(int);.
2eb0: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
2ec0: 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73  e(X)  if( X ){ s
2ed0: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f  qlite3Coverage(_
2ee0: 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73  _LINE__); }.#els
2ef0: 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  e.# define testc
2f00: 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ase(X).#endif../
2f10: 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c  *.** The TESTONL
2f20: 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  Y macro is used 
2f30: 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61  to enclose varia
2f40: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
2f50: 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74   or.** other bit
2f60: 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61  s of code that a
2f70: 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70  re needed to sup
2f80: 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e  port the argumen
2f90: 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73  ts.** within tes
2fa0: 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65  tcase() and asse
2fb0: 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a  rt() macros..*/.
2fc0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45  #if !defined(NDE
2fd0: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
2fe0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
2ff0: 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54  TEST).# define T
3000: 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  ESTONLY(X)  X.#e
3010: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53  lse.# define TES
3020: 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  TONLY(X).#endif.
3030: 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73  ./*.** Sometimes
3040: 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c   we need a small
3050: 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20   amount of code 
3060: 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62  such as a variab
3070: 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
3080: 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f  n.** to setup fo
3090: 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74  r a later assert
30a0: 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57  () statement.  W
30b0: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68  e do not want th
30c0: 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70  is code to.** ap
30d0: 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74  pear when assert
30e0: 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20  () is disabled. 
30f0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
3100: 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72  acro is therefor
3110: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e  e.** used to con
3120: 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20  tain that setup 
3130: 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22  code.  The "VVA"
3140: 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20   acronym stands 
3150: 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61  for.** "Verifica
3160: 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
3170: 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  , and Accreditat
3180: 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20  ion".  In other 
3190: 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f  words, the.** co
31a0: 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e  de within VVA_ON
31b0: 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72  LY() will only r
31c0: 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69  un during verifi
31d0: 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73  cation processes
31e0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45  ..*/.#ifndef NDE
31f0: 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41  BUG.# define VVA
3200: 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  _ONLY(X)  X.#els
3210: 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  e.# define VVA_O
3220: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
3230: 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20  *.** The ALWAYS 
3240: 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73  and NEVER macros
3250: 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61   surround boolea
3260: 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68  n expressions wh
3270: 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ich.** are inten
3280: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
3290: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
32a0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
32b0: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
32c0: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
32d0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
32e0: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
32f0: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
3300: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
3310: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
3320: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
3330: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
3340: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
3350: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
3360: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
3370: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
3380: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
3390: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
33a0: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
33b0: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
33c0: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
33d0: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
33e0: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
33f0: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
3400: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
3410: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
3420: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
3430: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
3440: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
3450: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3460: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
3470: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
3480: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
3490: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
34a0: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
34b0: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
34c0: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
34d0: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
34e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
34f0: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3500: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3510: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3520: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3530: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
3540: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
3550: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
3560: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
3570: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
3580: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3590: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
35a0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
35b0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
35c0: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
35d0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
35e0: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
35f0: 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66  ** Some malloc f
3600: 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c 79  ailures are only
3610: 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51 4c   possible if SQL
3620: 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43  ITE_TEST_REALLOC
3630: 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64 65  _STRESS is.** de
3640: 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64 20  fined.  We need 
3650: 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e 73  to defend agains
3660: 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65 73  t those failures
3670: 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77 69   when testing wi
3680: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 53  th.** SQLITE_TES
3690: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
36a0: 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20 77  , but we don't w
36b0: 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68 61  ant the unreacha
36c0: 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a 20  ble branches.** 
36d0: 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c 20  during a normal 
36e0: 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c 6c  build.  The foll
36f0: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e 20  owing macro can 
3700: 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61 62  be used to disab
3710: 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61 74  le tests.** that
3720: 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c 73   are always fals
3730: 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53 51  e except when SQ
3740: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
3750: 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74 2e  C_STRESS is set.
3760: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3770: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
3780: 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64 65  LOC_STRESS).# de
3790: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
37a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
37b0: 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (X).#elif !defin
37c0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
37d0: 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  ine ONLY_IF_REAL
37e0: 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28  LOC_STRESS(X)  (
37f0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
3800: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
3810: 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  ine ONLY_IF_REAL
3820: 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28  LOC_STRESS(X)  (
3830: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
3840: 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75 73   Declarations us
3850: 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20 74  ed for tracing t
3860: 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  he operating sys
3870: 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  tem interfaces..
3880: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3890: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f 54  QLITE_FORCE_OS_T
38a0: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
38b0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
38c0: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
38d0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
38e0: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
38f0: 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
3900: 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20 64  ite3OSTrace;.# d
3910: 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29  efine OSTRACE(X)
3920: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 71            if( sq
3930: 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20 73  lite3OSTrace ) s
3940: 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
3950: 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  f X.# define SQL
3960: 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
3970: 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  E.#else.# define
3980: 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75 6e   OSTRACE(X).# un
3990: 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56 45  def  SQLITE_HAVE
39a0: 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69 66  _OS_TRACE.#endif
39b0: 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20 73  ../*.** Is the s
39c0: 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29 20  qlite3ErrName() 
39d0: 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64 20  function needed 
39e0: 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20 43  in the build?  C
39f0: 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20  urrently,.** it 
3a00: 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d 75  is needed by "mu
3a10: 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65 6e  tex_w32.c" (when
3a20: 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f 73   debugging), "os
3a30: 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a 2a  _win.c" (when.**
3a40: 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61 62   OSTRACE is enab
3a50: 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65 76  led), and by sev
3a60: 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20 66  eral "test*.c" f
3a70: 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65 0a  iles (which are.
3a80: 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e  ** compiled usin
3a90: 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e 0a  g SQLITE_TEST)..
3aa0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
3ab0: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3ac0: 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  ACE) || defined(
3ad0: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
3ae0: 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
3af0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
3b00: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 23  SQLITE_OS_WIN).#
3b10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
3b20: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6c  EED_ERR_NAME.#el
3b30: 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49  se.# undef  SQLI
3b40: 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
3b50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
3b60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
3b70: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 73  LAIN_COMMENTS is
3b80: 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77 69   incompatible wi
3b90: 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  th SQLITE_OMIT_E
3ba0: 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65 66  XPLAIN.*/.#ifdef
3bb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
3bc0: 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51 4c  LAIN.# undef SQL
3bd0: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3be0: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64  IN_COMMENTS.#end
3bf0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
3c00: 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29   true (non-zero)
3c10: 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69 73   if the input is
3c20: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
3c30: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a   is too large.**
3c40: 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69   to fit in 32-bi
3c50: 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  ts.  This macro 
3c60: 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
3c70: 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63 61  f various testca
3c80: 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74  se().** macros t
3c90: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65  o verify that we
3ca0: 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51 4c   have tested SQL
3cb0: 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69  ite for large-fi
3cc0: 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23  le support..*/.#
3cd0: 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e  define IS_BIG_IN
3ce0: 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69 36  T(X)  (((X)&~(i6
3cf0: 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d 30  4)0xffffffff)!=0
3d00: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63  )../*.** The mac
3d10: 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73  ro unlikely() is
3d20: 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72   a hint that sur
3d30: 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e  rounds a boolean
3d40: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74  .** expression t
3d50: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66  hat is usually f
3d60: 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b  alse.  Macro lik
3d70: 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a  ely() surrounds.
3d80: 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ** a boolean exp
3d90: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
3da0: 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 54  usually true.  T
3db0: 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c 64  hese hints could
3dc0: 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c 20  ,.** in theory, 
3dd0: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 63  be used by the c
3de0: 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65 72  ompiler to gener
3df0: 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c  ate better code,
3e00: 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   but.** currentl
3e10: 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74 20  y they are just 
3e20: 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75 6d  comments for hum
3e30: 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a 23  an readers..*/.#
3e40: 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29  define likely(X)
3e50: 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65 20      (X).#define 
3e60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58 29  unlikely(X)  (X)
3e70: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ..#include "hash
3e80: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
3e90: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
3ea0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
3eb0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
3ec0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
3ed0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
3ee0: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
3ef0: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
3f00: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
3f10: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
3f20: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
3f30: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
3f40: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
3f50: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
3f60: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
3f70: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3f80: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
3f90: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
3fa0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
3fb0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
3fc0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
3fd0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
3fe0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
3ff0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
4000: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
4010: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
4020: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
4030: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
4040: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4050: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
4060: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
4070: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
4080: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
4090: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
40a0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
40b0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
40c0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
40d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
40e0: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
40f0: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
4100: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
4110: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
4120: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
4130: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
4140: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
4150: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
4160: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
4170: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
4180: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
4190: 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64  r.** to omit cod
41a0: 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74  e used by TEMP t
41b0: 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65  ables without me
41c0: 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74  ssy #ifndef stat
41d0: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65  ements..*/.#ifde
41e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
41f0: 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49  MPDB.#define OMI
4200: 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65  T_TEMPDB 1.#else
4210: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
4220: 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  MPDB 0.#endif../
4230: 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66  *.** The "file f
4240: 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73  ormat" number is
4250: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
4260: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
4270: 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20  whenever.** the 
4280: 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20  VDBE-level file 
4290: 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20  format changes. 
42a0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
42b0: 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65  acros define the
42c0: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20  .** the default 
42d0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  file format for 
42e0: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e  new databases an
42f0: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69  d the maximum fi
4300: 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61  le format.** tha
4310: 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61  t the library ca
4320: 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69  n read..*/.#defi
4330: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49  ne SQLITE_MAX_FI
4340: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e  LE_FORMAT 4.#ifn
4350: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
4360: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23  LT_FILE_FORMAT.#
4370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4380: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
4390: 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  AT 4.#endif../*.
43a0: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  ** Determine whe
43b0: 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72  ther triggers ar
43c0: 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64  e recursive by d
43d0: 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61  efault.  This ca
43e0: 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20  n be.** changed 
43f0: 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e  at run-time usin
4400: 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23  g a pragma..*/.#
4410: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4420: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
4430: 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e  TRIGGERS.# defin
4440: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4450: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
4460: 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ERS 0.#endif../*
4470: 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65  .** Provide a de
4480: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
4490: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
44a0: 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20  E in case it is 
44b0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  not specified.**
44c0: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   on the command-
44d0: 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  line.*/.#ifndef 
44e0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
44f0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
4500: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23  E_TEMP_STORE 1.#
4510: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
4520: 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20  EMP_STORE_xc 1  
4530: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
4540: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
4550: 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76  f../*.** If no v
4560: 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 70 72  alue has been pr
4570: 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54  ovided for SQLIT
4580: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4590: 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53  EADS, or if.** S
45a0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
45b0: 20 69 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65   is set to 3 (ne
45c0: 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72  ver use temporar
45d0: 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74  y files), set it
45e0: 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a  .** to zero..*/.
45f0: 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  #if SQLITE_TEMP_
4600: 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49  STORE==3 || SQLI
4610: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30  TE_THREADSAFE==0
4620: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4630: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4640: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4650: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4660: 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23  READS 0.#endif.#
4670: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
4680: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4690: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
46a0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
46b0: 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 8.#endif.#if
46c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
46d0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
46e0: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
46f0: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
4700: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
4710: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
4720: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4730: 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  EADS>SQLITE_MAX_
4740: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
4750: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
4760: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4770: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4780: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4790: 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ADS SQLITE_DEFAU
47a0: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
47b0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
47c0: 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74  The default init
47d0: 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66  ial allocation f
47e0: 6f 72 20 74 68 65 20 70 61 67 65 63 61 63 68 65  or the pagecache
47f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61   when using sepa
4800: 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68  rate.** pagecach
4810: 65 73 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  es for each data
4820: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
4830: 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d    A positive num
4840: 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75  ber is the.** nu
4850: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20  mber of pages.  
4860: 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  A negative numbe
4870: 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73  r N translations
4880: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 62 75   means that a bu
4890: 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34  ffer.** of -1024
48a0: 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f  *N bytes is allo
48b0: 63 61 74 65 64 20 61 6e 64 20 75 73 65 64 20 66  cated and used f
48c0: 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73  or as many pages
48d0: 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64   as it will hold
48e0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
48f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
4900: 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69  HE_INITSZ.# defi
4910: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4920: 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20  T_PCACHE_INITSZ 
4930: 31 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  100.#endif../*.*
4940: 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64  * GCC does not d
4950: 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74  efine the offset
4960: 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65  of() macro so we
4970: 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69  'll have to do i
4980: 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a  t.** ourselves..
4990: 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65  */.#ifndef offse
49a0: 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73  tof.#define offs
49b0: 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46  etof(STRUCTURE,F
49c0: 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68  IELD) ((int)((ch
49d0: 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45  ar*)&((STRUCTURE
49e0: 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65  *)0)->FIELD)).#e
49f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
4a00: 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69  os to compute mi
4a10: 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75  nimum and maximu
4a20: 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73  m of two numbers
4a30: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e  ..*/.#ifndef MIN
4a40: 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  .# define MIN(A,
4a50: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
4a60: 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  (B)).#endif.#ifn
4a70: 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65  def MAX.# define
4a80: 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28   MAX(A,B) ((A)>(
4a90: 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64  B)?(A):(B)).#end
4aa0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74  if../*.** Swap t
4ab0: 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79  wo objects of ty
4ac0: 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66  pe TYPE..*/.#def
4ad0: 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c  ine SWAP(TYPE,A,
4ae0: 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d  B) {TYPE t=A; A=
4af0: 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  B; B=t;}../*.** 
4b00: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4b10: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65  this machine use
4b20: 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c  s EBCDIC.  (Yes,
4b30: 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a   believe it or.*
4b40: 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65  * not, there are
4b50: 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20   still machines 
4b60: 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75  out there that u
4b70: 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23  se EBCDIC.).*/.#
4b80: 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27  if 'A' == '\301'
4b90: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4ba0: 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a  _EBCDIC 1.#else.
4bb0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4bc0: 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a  ASCII 1.#endif..
4bd0: 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f  /*.** Integers o
4be0: 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20  f known sizes.  
4bf0: 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d  These typedefs m
4c00: 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20  ight change for 
4c10: 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a  architectures.**
4c20: 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73   where the sizes
4c30: 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65   very.  Preproce
4c40: 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20  ssor macros are 
4c50: 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61  available so tha
4c60: 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63  t the.** types c
4c70: 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74  an be convenient
4c80: 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20  ly redefined at 
4c90: 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c  compile-type.  L
4ca0: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
4cb0: 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49          cc '-DUI
4cc0: 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20  NTPTR_TYPE=long 
4cd0: 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f  long int' ....*/
4ce0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f  .#ifndef UINT32_
4cf0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4d00: 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65  E_UINT32_T.#  de
4d10: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
4d20: 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65   uint32_t.# else
4d30: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
4d40: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
4d50: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
4d60: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31  if.#ifndef UINT1
4d70: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
4d80: 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20  AVE_UINT16_T.#  
4d90: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
4da0: 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c  PE uint16_t.# el
4db0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4dc0: 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T16_TYPE unsigne
4dd0: 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  d short int.# en
4de0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
4df0: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  ef INT16_TYPE.# 
4e00: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36  ifdef HAVE_INT16
4e10: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
4e20: 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a  16_TYPE int16_t.
4e30: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
4e40: 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72   INT16_TYPE shor
4e50: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
4e60: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4e70: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
4e80: 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20  HAVE_UINT8_T.#  
4e90: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
4ea0: 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  E uint8_t.# else
4eb0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4ec0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63  _TYPE unsigned c
4ed0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
4ee0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f  if.#ifndef INT8_
4ef0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4f00: 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  E_INT8_T.#  defi
4f10: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74  ne INT8_TYPE int
4f20: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
4f30: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
4f40: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4f50: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4f60: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
4f70: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
4f80: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
4f90: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
4fa0: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
4fb0: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
4fc0: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
4fd0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
4fe0: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
4ff0: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
5000: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
5010: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5020: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
5030: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
5040: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
5050: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5060: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
5070: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
5080: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
5090: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
50a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
50b0: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
50c0: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
50d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
50e0: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
50f0: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
5100: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
5110: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5120: 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50  typedef INT8_TYP
5130: 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20  E i8;           
5140: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
5150: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
5160: 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58  /*.** SQLITE_MAX
5170: 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f  _U32 is a u64 co
5180: 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74  nstant that is t
5190: 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76  he maximum u64 v
51a0: 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e  alue.** that can
51b0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
51c0: 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  u32 without loss
51d0: 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76   of data.  The v
51e0: 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30  alue.** is 0x000
51f0: 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20  00000ffffffff.  
5200: 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71  But because of q
5210: 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f  uirks of some co
5220: 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68  mpilers, we.** h
5230: 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74  ave to specify t
5240: 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  he value in the 
5250: 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d  less intuitive m
5260: 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a  anner shown:.*/.
5270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
5280: 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29  AX_U32  ((((u64)
5290: 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a  1)<<32)-1)../*.*
52a0: 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75  * The datatype u
52b0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74  sed to store est
52c0: 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75  imates of the nu
52d0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
52e0: 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  a.** table or in
52f0: 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e  dex.  This is an
5300: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
5310: 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e  r type.  For 99.
5320: 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72  9% of.** the wor
5330: 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74  ld, a 32-bit int
5340: 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65  eger is sufficie
5350: 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69  nt.  But a 64-bi
5360: 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e  t integer.** can
5370: 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70   be used at comp
5380: 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69  ile-time if desi
5390: 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  red..*/.#ifdef S
53a0: 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54  QLITE_64BIT_STAT
53b0: 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74  S. typedef u64 t
53c0: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34  Rowcnt;    /* 64
53d0: 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71  -bit only if req
53e0: 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c  uested at compil
53f0: 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a  e-time */.#else.
5400: 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f   typedef u32 tRo
5410: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62  wcnt;    /* 32-b
5420: 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  it is the defaul
5430: 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  t */.#endif../*.
5440: 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61  ** Estimated qua
5450: 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72  ntities used for
5460: 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20   query planning 
5470: 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36  are stored as 16
5480: 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68  -bit.** logarith
5490: 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74  ms.  For quantit
54a0: 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73  y X, the value s
54b0: 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32  tored is 10*log2
54c0: 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69  (X).  This.** gi
54d0: 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72  ves a possible r
54e0: 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f  ange of values o
54f0: 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  f approximately 
5500: 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38  1.0e986 to 1e-98
5510: 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c  6..** But the al
5520: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65  lowed values are
5530: 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20   "grainy".  Not 
5540: 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72  every value is r
5550: 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a  epresentable..**
5560: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75   For example, qu
5570: 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20  antities 16 and 
5580: 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72  17 are both repr
5590: 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67  esented by a Log
55a0: 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48  Est.** of 40.  H
55b0: 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f  owever, since Lo
55c0: 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73 20  gEst quantities 
55d0: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
55e0: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
55f0: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
5600: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
5610: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
5620: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
5630: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
5640: 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73   "Logarithmic Es
5650: 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45  timate"..**.** E
5660: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20  xamples:.**     
5670: 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20   1 -> 0         
5680: 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20       20 -> 43   
5690: 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20         10000 -> 
56a0: 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e  132.**      2 ->
56b0: 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20   10             
56c0: 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20  25 -> 46        
56d0: 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a    25000 -> 146.*
56e0: 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20  *      3 -> 16  
56f0: 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e            100 ->
5700: 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30   66        10000
5710: 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20  00 -> 199.**    
5720: 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20    4 -> 20       
5730: 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20      1000 -> 99  
5740: 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e        1048576 ->
5750: 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d   200.**     10 -
5760: 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31  > 33           1
5770: 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32  024 -> 100    42
5780: 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a  94967296 -> 320.
5790: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74  **.** The LogEst
57a0: 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65   can be negative
57b0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61   to indicate fra
57c0: 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a  ctional values..
57d0: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
57e0: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
57f0: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
5800: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
5810: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
5820: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5830: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
5840: 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50  Set the SQLITE_P
5850: 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20  TRSIZE macro to 
5860: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
5870: 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72  tes in a pointer
5880: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5890: 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20  TE_PTRSIZE.# if 
58a0: 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46  defined(__SIZEOF
58b0: 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20  _POINTER__).#   
58c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
58d0: 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50  RSIZE __SIZEOF_P
58e0: 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20  OINTER__.# elif 
58f0: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
5900: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
5910: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
5920: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
5930: 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69     \.       defi
5940: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c  ned(_M_ARM)   ||
5950: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
5960: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
5970: 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e  __x86).#   defin
5980: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5990: 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65   4.# else.#   de
59a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
59b0: 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 8.# endif.#e
59c0: 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74  ndif../* The upt
59d0: 72 20 74 79 70 65 20 69 73 20 61 6e 20 75 6e 73  r type is an uns
59e0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6c 61  igned integer la
59f0: 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f  rge enough to ho
5a00: 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a  ld a pointer.*/.
5a10: 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  #if defined(HAVE
5a20: 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74 79 70  _STDINT_H).  typ
5a30: 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74 20 75  edef uintptr_t u
5a40: 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54  ptr;.#elif SQLIT
5a50: 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74  E_PTRSIZE==4.  t
5a60: 79 70 65 64 65 66 20 75 33 32 20 75 70 74 72 3b  ypedef u32 uptr;
5a70: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
5a80: 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e 64 69   u64 uptr;.#endi
5a90: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
5aa0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
5ab0: 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73 20 74  ) macro checks t
5ac0: 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74 65 72  o see if pointer
5ad0: 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20   P points to.** 
5ae0: 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77 65 65  something betwee
5af0: 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65 29 20  n S (inclusive) 
5b00: 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69 76 65  and E (exclusive
5b10: 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  )..**.** In othe
5b20: 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20 61 20  r words, S is a 
5b30: 62 75 66 66 65 72 20 61 6e 64 20 45 20 69 73 20  buffer and E is 
5b40: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
5b50: 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
5b60: 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  r.** the end of 
5b70: 62 75 66 66 65 72 20 53 2e 20 20 54 68 69 73 20  buffer S.  This 
5b80: 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20 74 72  macro returns tr
5b90: 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73 20 74  ue if P points t
5ba0: 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63  o something.** c
5bb0: 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
5bc0: 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f  the buffer S..*/
5bd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5be0: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
5bf0: 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70 74 72  (uptr)(P)>=(uptr
5c00: 29 28 53 29 29 26 26 28 28 75 70 74 72 29 28 50  )(S))&&((uptr)(P
5c10: 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a 0a 0a  )<(uptr)(E)))...
5c20: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
5c30: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
5c40: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
5c50: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
5c60: 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68  ndian,.** and wh
5c70: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
5c80: 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20  t determination 
5c90: 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63  is run-time or c
5ca0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a  ompile-time..**.
5cb0: 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66  ** For best perf
5cc0: 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65  ormance, an atte
5cd0: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67  mpt is made to g
5ce0: 75 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65  uess at the byte
5cf0: 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20  -order.** using 
5d00: 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d  C-preprocessor m
5d10: 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20  acros.  If that 
5d20: 69 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c  is unsuccessful,
5d30: 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49   or if.** -DSQLI
5d40: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
5d50: 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74  RDER=1 is set, t
5d60: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
5d70: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
5d80: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
5d90: 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33 38  #if (defined(i38
5da0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
5db0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
5dc0: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
5dd0: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64  ) ||    \.     d
5de0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29  efined(__x86_64)
5df0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
5e00: 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  6_64__) || defin
5e10: 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20  ed(_M_X64)  ||  
5e20: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
5e30: 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65  (_M_AMD64) || de
5e40: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
5e50: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
5e60: 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20  86)   ||    \.  
5e70: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d     defined(__arm
5e80: 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65 64  __)) && !defined
5e90: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
5ea0: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
5eb0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
5ec0: 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 64  RDER    1234.# d
5ed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
5ee0: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
5ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
5f00: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
5f10: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
5f20: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
5f30: 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69  TF16LE.#endif.#i
5f40: 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72 63  f (defined(sparc
5f50: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
5f60: 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20  __ppc__))  \.   
5f70: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
5f80: 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45  ITE_RUNTIME_BYTE
5f90: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
5fa0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
5fb0: 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e      4321.# defin
5fc0: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
5fd0: 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65  AN    1.# define
5fe0: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
5ff0: 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20  DIAN 0.# define 
6000: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6010: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6020: 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  BE.#endif.#if !d
6030: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59  efined(SQLITE_BY
6040: 54 45 4f 52 44 45 52 29 0a 23 20 69 66 64 65 66  TEORDER).# ifdef
6050: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6060: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6070: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6080: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6090: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
60a0: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
60b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
60c0: 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20  YTEORDER    0   
60d0: 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e    /* 0 means "un
60e0: 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65  known at compile
60f0: 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69  -time" */.# defi
6100: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
6110: 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a  IAN    (*(char *
6120: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
6130: 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  0).# define SQLI
6140: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
6150: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6160: 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65  te3one)==1).# de
6170: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6180: 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45  6NATIVE  (SQLITE
6190: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
61a0: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
61b0: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
61c0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74  ../*.** Constant
61d0: 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73  s for the larges
61e0: 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70  t and smallest p
61f0: 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73  ossible 64-bit s
6200: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a  igned integers..
6210: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
6220: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
6230: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
6240: 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  n both 32-bit an
6250: 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70  d 64-bit.** comp
6260: 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ilers..*/.#defin
6270: 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  e LARGEST_INT64 
6280: 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28   (0xffffffff|(((
6290: 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  i64)0x7fffffff)<
62a0: 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d  <32)).#define SM
62b0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28  ALLEST_INT64 (((
62c0: 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53  i64)-1) - LARGES
62d0: 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20  T_INT64)../*.** 
62e0: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
62f0: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
6300: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
6310: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
6320: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
6330: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
6340: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
6350: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
6360: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
6370: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
6380: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
6390: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
63a0: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
63b0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
63c0: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
63d0: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
63e0: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
63f0: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
6400: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
6410: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
6420: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
6430: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
6440: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
6450: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
6460: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
6470: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
6480: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
6490: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
64a0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
64b0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
64c0: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
64d0: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
64e0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
64f0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
6500: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
6510: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
6520: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
6530: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
6540: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
6550: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
6560: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
6570: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
6580: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
6590: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
65a0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
65b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
65c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
65d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
65e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
65f0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
6600: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
6610: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
6620: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
6630: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
6640: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
6650: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
6660: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
6670: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
6680: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6690: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
66a0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
66b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
66c0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
66d0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
66e0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
66f0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
6700: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
6710: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
6720: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
6730: 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  ls.h>.#endif.#if
6740: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
6750: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
6760: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
6770: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6780: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
6790: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
67a0: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
67b0: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
67c0: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20   defined(__sun) 
67d0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
67e0: 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20  _FreeBSD__) \.  
67f0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61  || defined(__Dra
6800: 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65  gonFly__).#   de
6810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6820: 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66  MMAP_SIZE 0x7fff
6830: 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38  0000  /* 2147418
6840: 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20  112 */.# else.# 
6850: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6860: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
6870: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6880: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6890: 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78  _SIZE_xc 1 /* ex
68a0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
68b0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
68c0: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
68d0: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
68e0: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
68f0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
6900: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
6910: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
6920: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
6930: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
6940: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
6950: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
6960: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
6970: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
6980: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
6990: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
69a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
69b0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
69c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
69d0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
69e0: 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  ZE_xc 1  /* Excl
69f0: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
6a00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53   */.#endif.#if S
6a10: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6a20: 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d  AP_SIZE>SQLITE_M
6a30: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75  AX_MMAP_SIZE.# u
6a40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
6a50: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
6a60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
6a70: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
6a80: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6a90: 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  SIZE.#endif../*.
6aa0: 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53  ** Only one of S
6ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
6ac0: 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  T3 or SQLITE_ENA
6ad0: 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65  BLE_STAT4 can be
6ae0: 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69   defined..** Pri
6af0: 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20 74  ority is given t
6b00: 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  o SQLITE_ENABLE_
6b10: 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68 65  STAT4.  If eithe
6b20: 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61  r are defined, a
6b30: 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51  lso.** define SQ
6b40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6b50: 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69  3_OR_STAT4.*/.#i
6b60: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
6b70: 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  LE_STAT4.# undef
6b80: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6b90: 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51  TAT3.# define SQ
6ba0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6bb0: 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c  3_OR_STAT4 1.#el
6bc0: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
6bd0: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
6be0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6bf0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
6c00: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
6c10: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6c20: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
6c30: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
6c40: 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f  _STAT4.#endif../
6c50: 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45  *.** SELECTTRACE
6c60: 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65  _ENABLED will be
6c70: 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20 64   either 1 or 0 d
6c80: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
6c90: 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68  her or not.** th
6ca0: 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20 67  e Select query g
6cb0: 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67  enerator tracing
6cc0: 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64   logic is turned
6cd0: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69   on..*/.#if defi
6ce0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
6cf0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
6d00: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
6d10: 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65  TTRACE).# define
6d20: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
6d30: 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64  BLED 1.#else.# d
6d40: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
6d50: 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64  E_ENABLED 0.#end
6d60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
6d70: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
6d80: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
6d90: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
6da0: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
6db0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
6dc0: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
6dd0: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20  e handle..**.** 
6de0: 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48  The sqlite.busyH
6df0: 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66  andler member of
6e00: 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75   the sqlite stru
6e10: 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ct contains the 
6e20: 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  busy.** callback
6e30: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
6e40: 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70  e handle. Each p
6e50: 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20  ager opened via 
6e60: 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61  the sqlite.** ha
6e70: 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61  ndle is passed a
6e80: 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69   pointer to sqli
6e90: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20  te.busyHandler. 
6ea0: 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  The busy-handler
6eb0: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  .** callback is 
6ec0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65  currently invoke
6ed0: 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68  d only from with
6ee0: 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74  in pager.c..*/.t
6ef0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75  ypedef struct Bu
6f00: 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61  syHandler BusyHa
6f10: 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75  ndler;.struct Bu
6f20: 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e  syHandler {.  in
6f30: 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20  t (*xFunc)(void 
6f40: 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20  *,int);  /* The 
6f50: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
6f60: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20  .  void *pArg;  
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6f80: 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75   First arg to bu
6f90: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
6fa0: 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20   int nBusy;     
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
6fc0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
6fd0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
6fe0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
6ff0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7000: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7010: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7020: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7030: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7040: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
7050: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
7060: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
7070: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
7080: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
7090: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
70a0: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
70b0: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
70c0: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
70d0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
70e0: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
70f0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
7100: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
7110: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
7120: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
7130: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
7140: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
7150: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
7160: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
7170: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
7180: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
7190: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
71a0: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
71b0: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
71c0: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
71d0: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
71e0: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
71f0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
7200: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
7210: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
7220: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
7230: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
7240: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
7250: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
7260: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
7270: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
7280: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
7290: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
72a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
72b0: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
72c0: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
72d0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
72e0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
72f0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
7300: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
7310: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
7320: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
7330: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
7340: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
7350: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
7360: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
7370: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
7380: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
7390: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
73a0: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
73b0: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
73c0: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
73d0: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
73e0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
73f0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
7400: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
7410: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
7420: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
7430: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
7440: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
7450: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
7460: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
7470: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
7480: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
7490: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
74a0: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
74b0: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
74c0: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
74d0: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
74e0: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
74f0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
7500: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
7510: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
7520: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
7530: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
7540: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
7550: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
7560: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
7570: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
7580: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
7590: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
75a0: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
75b0: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
75c0: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
75d0: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
75e0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
75f0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
7600: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
7610: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
7620: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
7630: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
7640: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
7650: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
7660: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
7670: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
7680: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
7690: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
76a0: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
76b0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
76c0: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
76d0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
76e0: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
76f0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
7700: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
7710: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
7720: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
7730: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
7740: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
7750: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
7760: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
7770: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
7780: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
7790: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
77a0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
77b0: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
77c0: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
77d0: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
77e0: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
77f0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
7800: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
7810: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
7820: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
7830: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
7840: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
7850: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
7860: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
7870: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
7880: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
7890: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
78a0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
78b0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
78c0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
78d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
78e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
78f0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
7900: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
7910: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
7920: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
7930: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
7940: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
7950: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
7960: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
7970: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
7980: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
7990: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
79a0: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
79b0: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
79c0: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
79d0: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
79e0: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
79f0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
7a00: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
7a10: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
7a20: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
7a30: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
7a40: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
7a50: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
7a60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
7a70: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
7a80: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
7a90: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
7aa0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
7ab0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
7ac0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
7ad0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
7ae0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
7af0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
7b00: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
7b10: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
7b20: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
7b30: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
7b40: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
7b50: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
7b60: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
7b70: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
7b80: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
7b90: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
7ba0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
7bb0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
7bc0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
7bd0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
7be0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
7bf0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
7c00: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
7c10: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
7c20: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
7c30: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
7c40: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
7c50: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
7c60: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
7c70: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
7c80: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
7c90: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
7ca0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
7cb0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7cc0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
7cd0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
7ce0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
7cf0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
7d00: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
7d10: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
7d20: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
7d30: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
7d40: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
7d50: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
7d60: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7d70: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
7d80: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
7d90: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
7da0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
7db0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
7dc0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
7dd0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
7de0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
7df0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
7e00: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
7e10: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
7e20: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
7e30: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
7e40: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
7e50: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
7e60: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
7e70: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
7e80: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
7e90: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
7ea0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
7eb0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
7ec0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ed0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
7ee0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ef0: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
7f00: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
7f10: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
7f20: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
7f30: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
7f40: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
7f50: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
7f60: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
7f70: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
7f80: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
7f90: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
7fa0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
7fb0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
7fc0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
7fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7fe0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
7ff0: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
8000: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
8010: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
8020: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
8030: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
8040: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8050: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
8060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
8070: 65 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74  eUpdate PreUpdat
8080: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8090: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
80a0: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
80b0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
80c0: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
80d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
80e0: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
80f0: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
8100: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
8110: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8120: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
8130: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8140: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8150: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8160: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8170: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8180: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8190: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
81a0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
81b0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
81c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
81d0: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
81e0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
81f0: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
8200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8210: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
8220: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
8230: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8240: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8250: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8260: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8270: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8280: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
82a0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
82b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
82c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
82d0: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
82e0: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
82f0: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
8300: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
8310: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
8320: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
8330: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8340: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8350: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20  th With;../*.** 
8360: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
8370: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
8380: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
8390: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
83a0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
83b0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
83c0: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
83d0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
83e0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
83f0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
8400: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
8410: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
8420: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
8430: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
8440: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
8450: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
8460: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
8470: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
8480: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
8490: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
84a0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
84b0: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
84c0: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
84d0: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
84e0: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
84f0: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
8500: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
8510: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
8520: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
8530: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
8540: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
8550: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
8560: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
8580: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
8590: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
85a0: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
85b0: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
85c0: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
85d0: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
85e0: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
85f0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
8600: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
8610: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
8620: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8630: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
8640: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
8650: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
8660: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
8670: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
8680: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
8690: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
86a0: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
86b0: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86d0: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
86e0: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8700: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
8710: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8730: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
8740: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
8750: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
8760: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
8770: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
8780: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
8790: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
87a0: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
87b0: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
87c0: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
87d0: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
87e0: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
87f0: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
8800: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
8810: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
8820: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
8830: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
8840: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 28 50  T_SYNCHRONOUS (P
8850: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
8860: 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e 64 69 66 0a  _FULL-1).#endif.
8870: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
8880: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
8890: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
88a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
88b0: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53  AL_SYNCHRONOUS S
88c0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
88d0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
88e0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
88f0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
8900: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
8910: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
8920: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
8930: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8940: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
8950: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
8960: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
8970: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
8980: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
8990: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
89a0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
89b0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
89c0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
89d0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
89e0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
89f0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
8a00: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
8a10: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
8a20: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
8a30: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
8a40: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
8a50: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
8a60: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
8a70: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
8a80: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
8a90: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
8aa0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
8ab0: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
8ac0: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
8ad0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
8ae0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75  a to disk */.  u
8af0: 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20  8 bSyncSet;     
8b00: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22      /* True if "
8b10: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
8b20: 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72  us=N" has been r
8b30: 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  un */.  Schema *
8b40: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
8b50: 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62  Pointer to datab
8b60: 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73  ase schema (poss
8b70: 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a  ibly shared) */.
8b80: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
8b90: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
8ba0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
8bb0: 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61   stores a databa
8bc0: 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  se schema..**.**
8bd0: 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a   Most Schema obj
8be0: 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61  ects are associa
8bf0: 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65  ted with a Btree
8c00: 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  .  The exception
8c10: 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d   is.** the Schem
8c20: 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64  a for the TEMP d
8c30: 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33  atabaes (sqlite3
8c40: 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69  .aDb[1]) which i
8c50: 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e  s free-standing.
8c60: 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61  .** In shared ca
8c70: 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67  che mode, a sing
8c80: 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  le Schema object
8c90: 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62   can be shared b
8ca0: 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74  y multiple.** Bt
8cb0: 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20  rees that refer 
8cc0: 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65  to the same unde
8cd0: 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20  rlying BtShared 
8ce0: 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63  object..**.** Sc
8cf0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
8d00: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
8d10: 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20  eallocated when 
8d20: 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74  the last Btree t
8d30: 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  hat.** reference
8d40: 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f  s them is destro
8d50: 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20  yed.   The TEMP 
8d60: 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c  Schema is manual
8d70: 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73  ly freed by.** s
8d80: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a  qlite3_close()..
8d90: 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75  *.** A thread mu
8da0: 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20  st be holding a 
8db0: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72  mutex on the cor
8dc0: 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65  responding Btree
8dd0: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
8de0: 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f  access Schema co
8df0: 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70  ntent.  This imp
8e00: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68  lies that the th
8e10: 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62  read must also b
8e20: 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d  e.** holding a m
8e30: 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69  utex on the sqli
8e40: 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  te3 connection p
8e50: 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73  ointer that owns
8e60: 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46   the Btree..** F
8e70: 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61  or a TEMP Schema
8e80: 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65  , only the conne
8e90: 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72  ction mutex is r
8ea0: 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75  equired..*/.stru
8eb0: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
8ec0: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
8ed0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
8ee0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
8ef0: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
8f00: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e  le */.  int iGen
8f10: 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20  eration;     /* 
8f20: 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  Generation count
8f30: 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64  er.  Incremented
8f40: 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67   with each chang
8f50: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48  e */.  Hash tblH
8f60: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
8f70: 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65  ll tables indexe
8f80: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8f90: 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20  ash idxHash;    
8fa0: 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65      /* All (name
8fb0: 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78  d) indices index
8fc0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
8fd0: 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20  Hash trigHash;  
8fe0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67       /* All trig
8ff0: 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20  gers indexed by 
9000: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66  name */.  Hash f
9010: 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f  keyHash;       /
9020: 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  * All foreign ke
9030: 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64  ys by referenced
9040: 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
9050: 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b   Table *pSeqTab;
9060: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c        /* The sql
9070: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
9080: 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49  le used by AUTOI
9090: 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38  NCREMENT */.  u8
90a0: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
90b0: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72     /* Schema for
90c0: 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  mat version for 
90d0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75  this file */.  u
90e0: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
90f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
9100: 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69  ding used by thi
9110: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
9120: 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b  u16 schemaFlags;
9130: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73       /* Flags as
9140: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9150: 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69  is schema */.  i
9160: 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20  nt cache_size;  
9170: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9180: 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e   pages to use in
9190: 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b   the cache */.};
91a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
91b0: 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
91c0: 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
91d0: 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
91e0: 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  the.** Db.pSchem
91f0: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
9200: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
9210: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9220: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
9230: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
9240: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
9250: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
9260: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
9270: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
9280: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9290: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
92a0: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
92b0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
92c0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
92d0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
92e0: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
92f0: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
9300: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
9310: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
9320: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
9330: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
9340: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
9350: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
9360: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
9370: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
9380: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
9390: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
93a0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
93b0: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
93c0: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
93d0: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
93e0: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
93f0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
9400: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
9410: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
9420: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
9430: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
9440: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
9450: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
9460: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
9470: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
9480: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
9490: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
94a0: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
94b0: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
94c0: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
94d0: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
94e0: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
94f0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
9500: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
9510: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
9520: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
9530: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
9540: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
9550: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
9560: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
9570: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
9580: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
9590: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
95a0: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
95b0: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
95c0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
95d0: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
95e0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
95f0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
9600: 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
9610: 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a  R_THREADS+1)../*
9620: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
9630: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
9640: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
9650: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
9660: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
9670: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
9680: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
9690: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
96a0: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
96b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
96c0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
96d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
96e0: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
96f0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
9700: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
9710: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
9720: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
9730: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
9740: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
9750: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
9760: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
9770: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
9780: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
9790: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
97a0: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
97b0: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
97c0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
97d0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
97e0: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
97f0: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
9800: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
9810: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
9820: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
9830: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
9840: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
9850: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
9860: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
9870: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
9880: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
9890: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
98a0: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
98b0: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
98c0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
98d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
98e0: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
98f0: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
9900: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
9910: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
9920: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
9930: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
9940: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
9950: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
9960: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
9970: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
9980: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
9990: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
99a0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
99b0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
99c0: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
99d0: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
99e0: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
99f0: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
9a00: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
9a10: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
9a20: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
9a30: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32  ookaside {.  u32
9a40: 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20   bDisable;      
9a50: 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65       /* Only ope
9a60: 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69  rate the lookasi
9a70: 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a  de when zero */.
9a80: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
9a90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
9aa0: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
9ab0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
9ac0: 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20  8 bMalloced;    
9ad0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
9ae0: 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65  f pStart obtaine
9af0: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
9b00: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74  alloc() */.  int
9b10: 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20   nOut;          
9b20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9b30: 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e  f buffers curren
9b40: 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
9b50: 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20  */.  int mxOut; 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9b70: 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66  Highwater mark f
9b80: 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74  or nOut */.  int
9b90: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
9ba0: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
9bb0: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
9bc0: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
9bd0: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
9be0: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
9bf0: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
9c00: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
9c10: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
9c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
9c30: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
9c40: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
9c50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
9c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9c70: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
9c80: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
9c90: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
9ca0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
9cb0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
9cc0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
9cd0: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
9ce0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
9cf0: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
9d00: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
9d10: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
9d20: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
9d30: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
9d40: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
9d50: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
9d60: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
9d70: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
9d80: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
9d90: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
9da0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
9db0: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
9dc0: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
9dd0: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
9de0: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
9df0: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
9e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
9e10: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
9e20: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
9e30: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
9e40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
9e50: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
9e60: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
9e70: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
9e80: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
9e90: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
9ea0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
9eb0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
9ec0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
9ed0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
9ee0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
9ef0: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
9f00: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
9f10: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9f20: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9f30: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
9f40: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
9f50: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
9f60: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9f80: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
9f90: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
9fa0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
9fd0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
9fe0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
9ff0: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
a000: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
a010: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
a020: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
a030: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
a040: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
a050: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
a060: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
a070: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
a080: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
a090: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
a0a0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
a0b0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
a0c0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
a0d0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
a0e0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
a0f0: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
a100: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
a110: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
a120: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
a130: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
a140: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
a150: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
a160: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
a170: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
a180: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
a190: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
a1a0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
a1b0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
a1c0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
a1d0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
a1e0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
a1f0: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
a200: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
a210: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
a220: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
a230: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
a240: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
a250: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
a260: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
a270: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
a280: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
a290: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
a2a0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
a2b0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a2c0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a2d0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
a2e0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
a2f0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
a300: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
a310: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
a320: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
a330: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
a340: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
a350: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
a360: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a370: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
a380: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3a0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
a3b0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
a3c0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
a3d0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
a3e0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
a3f0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
a400: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a410: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
a440: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  endif.../*.** Ea
a450: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
a460: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
a470: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a480: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
a490: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
a4a0: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
a4b0: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
a4c0: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
a4d0: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
a4e0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
a4f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
a500: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
a510: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
a520: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
a530: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
a540: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
a550: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a560: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
a570: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
a580: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
a590: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
a5a0: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5c0: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
a5d0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
a5e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a5f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a600: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
a610: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
a620: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
a650: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
a660: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
a670: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
a680: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
a690: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
a6a0: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
a6b0: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
a6c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a6d0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
a6e0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
a6f0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
a700: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
a710: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
a720: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
a730: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
a740: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a760: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
a770: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
a780: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
a790: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
a7a0: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
a7b0: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
a7c0: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
a7d0: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
a7e0: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
a7f0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
a800: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
a810: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
a820: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a840: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
a850: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
a860: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
a870: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
a880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
a890: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
a8a0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a8c0: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
a8d0: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
a8e0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
a8f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
a900: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
a910: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
a920: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a940: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
a950: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
a960: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
a970: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
a980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
a990: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
a9a0: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
a9b0: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
a9d0: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
a9e0: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
a9f0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
aa00: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
aa10: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
aa20: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
aa30: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
aa40: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
aa50: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
aa60: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
aa70: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
aa80: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
aa90: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
aab0: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
aac0: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
aad0: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
aae0: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
aaf0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
ab00: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
ab10: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
ab20: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20  s a TS */.  int 
ab30: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
ab40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
ab50: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
ab60: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
ab70: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
ab90: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
aba0: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
abb0: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
abc0: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
abd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
abe0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
abf0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
ac00: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
ac10: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
ac20: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
ac30: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
ac40: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
ac50: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
ac60: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
ac70: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
ac80: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
ac90: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
aca0: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
acb0: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
acc0: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
acd0: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
ace0: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
acf0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
ad00: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
ad10: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
ad20: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
ad40: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
ad50: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
ad60: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
ad70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad80: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
ad90: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
ada0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
adb0: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
add0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
ade0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
adf0: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
ae00: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
ae10: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
ae20: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
ae30: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
ae40: 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65  /.    u8 imposte
ae50: 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  rTable;         
ae60: 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e    /* Building an
ae70: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
ae80: 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69  */.  } init;.  i
ae90: 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20  nt nVdbeActive; 
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20  Number of VDBEs 
aec0: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
aed0: 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  g */.  int nVdbe
aee0: 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20  Read;           
aef0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
af00: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
af10: 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  hat read or writ
af20: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
af30: 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  Write;          
af40: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
af50: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
af60: 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69  hat read and wri
af70: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
af80: 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  eExec;          
af90: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
afa0: 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
afb0: 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f  to VdbeExec() */
afc0: 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79  .  int nVDestroy
afd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
afe0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
aff0: 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  tive OP_VDestroy
b000: 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20   operations */. 
b010: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b030: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
b040: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
b050: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
b060: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
b070: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
b080: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
b090: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
b0a0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
b0b0: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
b0c0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
b0d0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
b0e0: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
b110: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
b120: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
b130: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
b140: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
b150: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
b160: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
b170: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
b180: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b1a0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
b1b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
b1c0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
b1f0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
b200: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
b210: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
b220: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
b230: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
b240: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
b250: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
b260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b270: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
b280: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
b290: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
b2a0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
b2b0: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
b2c0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
b2d0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
b2e0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
b2f0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
b300: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
b310: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b320: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
b330: 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  64);.#ifdef SQLI
b340: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
b350: 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20  ATE_HOOK.  void 
b360: 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20  *pPreUpdateArg; 
b370: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b380: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50  t argument to xP
b390: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
b3a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
b3b0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  eUpdateCallback)
b3c0: 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65  (   /* Registere
b3d0: 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
b3e0: 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29  preupdate_hook()
b3f0: 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71   */.    void*,sq
b400: 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20  lite3*,int,char 
b410: 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73  const*,char cons
b420: 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  t*,sqlite3_int64
b430: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20  ,sqlite3_int64. 
b440: 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20   );.  PreUpdate 
b450: 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20  *pPreUpdate;    
b460: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
b470: 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70  or active pre-up
b480: 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  date callback */
b490: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b4a0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
b4b0: 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64  TE_HOOK */.#ifnd
b4c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
b4d0: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
b4e0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
b4f0: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
b500: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
b510: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
b520: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
b530: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
b540: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
b550: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
b560: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
b570: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
b580: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
b590: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
b5a0: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
b5b0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
b5c0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
b5d0: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
b5e0: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
b5f0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
b600: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
b610: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
b620: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
b630: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
b640: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
b650: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
b660: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
b670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
b680: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
b690: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
b6a0: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
b6b0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
b6c0: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
b6d0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
b6e0: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
b6f0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
b700: 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20  xauth xAuth;    
b710: 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20        /* Access 
b720: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75  authorization fu
b730: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
b740: 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20   *pAuthArg;     
b750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
b760: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
b770: 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e   access auth fun
b780: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
b790: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b7a0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
b7b0: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50  LBACK.  int (*xP
b7c0: 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29  rogress)(void *)
b7d0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f  ;     /* The pro
b7e0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
b7f0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72  /.  void *pProgr
b800: 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  essArg;         
b810: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b820: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
b830: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69  llback */.  unsi
b840: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70  gned nProgressOp
b850: 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  s;        /* Num
b860: 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66  ber of opcodes f
b870: 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  or progress call
b880: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  back */.#endif.#
b890: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b8a0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
b8b0: 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20    int nVTrans;  
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
b8e0: 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a  e of aVTrans */.
b8f0: 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20    Hash aModule; 
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b910: 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20  /* populated by 
b920: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
b930: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61  odule() */.  Vta
b940: 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20  bCtx *pVtabCtx; 
b950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
b960: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
b970: 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72   vtab connect/cr
b980: 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  eate */.  VTable
b990: 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20   **aVTrans;     
b9a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75          /* Virtu
b9b0: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  al tables with o
b9c0: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  pen transactions
b9d0: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44   */.  VTable *pD
b9e0: 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a  isconnect;    /*
b9f0: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
ba00: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
ba10: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
ba20: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
ba30: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
ba40: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
ba50: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
ba60: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
ba70: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba90: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
baa0: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
bab0: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
bac0: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
bad0: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
bae0: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
baf0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
bb00: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
bb10: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
bb20: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
bb30: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
bb40: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
bb50: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
bb60: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
bb70: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
bb80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
bb90: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
bba0: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
bbb0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
bbc0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
bbd0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bbe0: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
bbf0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
bc00: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc20: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
bc30: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
bc40: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
bc50: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
bc60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bc70: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
bc80: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
bc90: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
bca0: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
bcb0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
bcc0: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
bcd0: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
bce0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
bcf0: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
bd00: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
bd10: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
bd20: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
bd30: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
bd40: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
bd50: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
bd60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
bd70: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
bd80: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
bd90: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
bda0: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
bdb0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
bdc0: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
bdd0: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
bde0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
bdf0: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
be00: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
be10: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
be20: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
be30: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
be40: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
be50: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
be60: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
be70: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
be80: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
be90: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
bea0: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
beb0: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
bec0: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
bed0: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
bee0: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
bef0: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
bf00: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
bf10: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
bf20: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
bf30: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
bf40: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
bf50: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
bf60: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
bf70: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
bf80: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
bf90: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
bfa0: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
bfd0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
bfe0: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
bff0: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
c000: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
c010: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
c020: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
c030: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
c040: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
c050: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
c060: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
c070: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
c080: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
c090: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
c0a0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
c0b0: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
c0c0: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
c0d0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
c0e0: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
c0f0: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
c100: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
c110: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
c120: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
c130: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
c140: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
c150: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
c160: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
c170: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
c180: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
c190: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
c1a0: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
c1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
c1c0: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
c1d0: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
c1e0: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
c1f0: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
c200: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
c210: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
c220: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
c230: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
c240: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
c250: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
c260: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
c270: 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  04  /* Show full
c280: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
c290: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
c2a0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  ne SQLITE_FullFS
c2b0: 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30  ync      0x00000
c2c0: 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  008  /* Use full
c2d0: 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61   fsync on the ba
c2e0: 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ckend */.#define
c2f0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
c300: 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31  FSync  0x0000001
c310: 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  0  /* Use full f
c320: 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f  sync for checkpo
c330: 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  int */.#define S
c340: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
c350: 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20       0x00000020 
c360: 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20   /* OK to spill 
c370: 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23  pager cache */.#
c380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
c390: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
c3a0: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
c3b0: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
c3c0: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
c3d0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
c3e0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
c3f0: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
c400: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
c410: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
c450: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
c460: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c490: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
c4a0: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
c4b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c4c0: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
c4d0: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
c4e0: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
c4f0: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
c500: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c530: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
c540: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
c550: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
c560: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
c570: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
c580: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
c590: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
c5a0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
c5b0: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
c5c0: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
c5d0: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
c5e0: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
c5f0: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
c600: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
c610: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
c620: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
c630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c640: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
c650: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
c660: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
c670: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
c680: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c690: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
c6a0: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
c6b0: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
c6c0: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
c6d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c6e0: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
c6f0: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
c700: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
c710: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
c720: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
c730: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
c740: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
c750: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
c760: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
c770: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
c780: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
c790: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
c7a0: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
c7b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
c7c0: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
c7d0: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
c7e0: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
c7f0: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
c800: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
c810: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
c820: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
c830: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
c840: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c850: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
c860: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
c870: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
c880: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
c890: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c8a0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
c8b0: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
c8c0: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
c8d0: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
c8e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
c8f0: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
c900: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
c910: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
c920: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
c930: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
c940: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
c950: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
c960: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
c970: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
c980: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
c990: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
c9a0: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
c9b0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
c9c0: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
c9d0: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
c9e0: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
c9f0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
ca00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ca10: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
ca20: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
ca30: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
ca40: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
ca50: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
ca60: 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30          0x040000
ca70: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
ca80: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
ca90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
caa0: 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  E_Vacuum        
cab0: 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20   0x08000000  /* 
cac0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
cad0: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
cae0: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
caf0: 43 6b 20 20 20 20 20 30 78 31 30 30 30 30 30 30  Ck     0x1000000
cb00: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
cb10: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
cb20: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
cb30: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
cb40: 69 7a 65 72 20 20 30 78 32 30 30 30 30 30 30 30  izer  0x20000000
cb50: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
cb60: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
cb70: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
cb80: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
cb90: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
cba0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
cbb0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
cbc0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
cbd0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
cbe0: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
cbf0: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
cc00: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
cc10: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
cc20: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
cc30: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
cc40: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
cc50: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
cc60: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
cc70: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
cc80: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
cc90: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
cca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ccb0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
ccc0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
ccd0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
cce0: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
ccf0: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
cd00: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
cd10: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
cd20: 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20  toring */./*    
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20              not 
cd40: 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20  used    0x0010  
cd50: 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f   // Was: SQLITE_
cd60: 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a  IdxRealAsInt */.
cd70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
cd80: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
cd90: 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0020   /* DISTIN
cda0: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
cdb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cdc0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
cdd0: 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f    0x0040   /* Co
cde0: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
cdf0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ce00: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ce10: 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20  oin 0x0080   /* 
ce20: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ce30: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ce40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75  define SQLITE_Su
ce50: 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30  bqCoroutine  0x0
ce60: 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74  100   /* Evaluat
ce70: 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20  e subqueries as 
ce80: 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64  coroutines */.#d
ce90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61  efine SQLITE_Tra
cea0: 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32  nsitive     0x02
ceb0: 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69  00   /* Transiti
cec0: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ve constraints *
ced0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cee0: 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20  _OmitNoopJoin   
cef0: 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74  0x0400   /* Omit
cf00: 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69   unused tables i
cf10: 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69  n joins */.#defi
cf20: 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34  ne SQLITE_Stat34
cf30: 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20           0x0800 
cf40: 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f    /* Use STAT3 o
cf50: 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a  r STAT4 data */.
cf60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
cf70: 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78  ursorHints    0x
cf80: 32 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50  2000   /* Add OP
cf90: 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f  _CursorHint opco
cfa0: 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  des */.#define S
cfb0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
cfc0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
cfd0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
cfe0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
cff0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
d000: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
d010: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
d020: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
d030: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
d040: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
d050: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
d060: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
d070: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
d080: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
d090: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
d0a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
d0b0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
d0c0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
d0d0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
d0e0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
d0f0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
d100: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
d110: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
d120: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
d130: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
d140: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
d150: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
d160: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
d170: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
d180: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
d190: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
d1a0: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
d1b0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
d1c0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
d1d0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
d1e0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
d1f0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
d200: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
d210: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
d220: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
d230: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
d240: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
d250: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
d260: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
d270: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
d280: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
d290: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
d2a0: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
d2b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
d2c0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
d2d0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
d2e0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
d2f0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
d300: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
d310: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
d320: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
d330: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
d340: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
d350: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
d360: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
d370: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
d380: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d390: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
d3a0: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
d3b0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
d3c0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
d3d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
d3e0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
d3f0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
d400: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
d410: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
d420: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
d430: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
d440: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
d450: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
d460: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
d470: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
d480: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
d490: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
d4a0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
d4b0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
d4c0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
d4d0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
d4e0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
d4f0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
d500: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
d510: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
d520: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
d530: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
d540: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
d550: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
d560: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
d570: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
d580: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
d590: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
d5a0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
d5b0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
d5c0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
d5d0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
d5e0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
d5f0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
d600: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
d610: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
d620: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
d630: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
d640: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
d650: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
d660: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d670: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
d680: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
d690: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
d6a0: 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20   u16 funcFlags; 
d6b0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
d6c0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
d6d0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
d6e0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
d6f0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
d700: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
d710: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
d720: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
d730: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
d740: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
d750: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
d760: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
d770: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
d780: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
d790: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
d7a0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
d7b0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7d0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
d7e0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
d7f0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
d800: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
d810: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
d820: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
d830: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
d840: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
d850: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
d860: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
d870: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
d880: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
d890: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
d8a0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
d8b0: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
d8c0: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
d8d0: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
d8e0: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
d8f0: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
d900: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
d910: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
d920: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
d930: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
d940: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
d950: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
d960: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
d970: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
d980: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
d990: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
d9a0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
d9b0: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
d9c0: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
d9d0: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
d9e0: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
d9f0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
da00: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
da10: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
da20: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
da30: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
da40: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
da50: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
da60: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
da70: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
da80: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
da90: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
daa0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
dab0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
dac0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
dad0: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
dae0: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
daf0: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
db00: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
db10: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
db20: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
db30: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
db40: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
db50: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
db60: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
db70: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
db80: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
db90: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
dba0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
dbb0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
dbc0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
dbd0: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
dbe0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
dbf0: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
dc00: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
dc10: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
dc20: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
dc30: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
dc40: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
dc50: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
dc60: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
dc70: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
dc80: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
dc90: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
dca0: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
dcb0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
dcc0: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
dcd0: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
dce0: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
dcf0: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
dd00: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
dd10: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
dd20: 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  this..*/.#define
dd30: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
dd40: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
dd50: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
dd60: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
dd70: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
dd80: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
dd90: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
dda0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
ddb0: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
ddc0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ddd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
dde0: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
ddf0: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
de00: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
de10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de20: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
de30: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
de40: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
de50: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
de60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
de70: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
de80: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
de90: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
dea0: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
deb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
dec0: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
ded0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
dee0: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
def0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df00: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
df10: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
df20: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
df30: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
df40: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
df50: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
df60: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
df70: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
df80: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
df90: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
dfa0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
dfb0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
dfc0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
dfd0: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
dfe0: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
dff0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
e000: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e010: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e020: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
e030: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
e040: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
e050: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
e060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
e070: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
e080: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
e090: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
e0a0: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
e0b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e0c0: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
e0d0: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
e0e0: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
e0f0: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
e120: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
e130: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
e140: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
e150: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
e160: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
e170: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
e180: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
e190: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
e1a0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
e1b0: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
e1c0: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
e1d0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
e1e0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
e1f0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
e200: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
e210: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
e220: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
e230: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
e240: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
e250: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
e260: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
e270: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
e280: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
e290: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
e2a0: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
e2b0: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
e2c0: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
e2d0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
e2e0: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
e2f0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
e300: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
e310: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
e320: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
e330: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
e340: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
e350: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
e360: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
e370: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
e380: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e390: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
e3a0: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
e3b0: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
e3c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
e3d0: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
e3e0: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
e3f0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
e400: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
e410: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
e420: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
e430: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
e440: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
e450: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
e460: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
e470: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
e480: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
e490: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
e4a0: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
e4b0: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
e4c0: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
e4d0: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
e4e0: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
e4f0: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
e500: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
e510: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
e520: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
e530: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
e540: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
e550: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
e560: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
e570: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
e580: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
e590: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
e5a0: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
e5b0: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
e5c0: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
e5d0: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
e5e0: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
e5f0: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
e600: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
e610: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
e620: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
e630: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
e640: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
e650: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
e660: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
e670: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
e680: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
e690: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
e6a0: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
e6b0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
e6c0: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
e6d0: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
e6e0: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
e6f0: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
e700: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
e710: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
e720: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
e730: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
e740: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
e750: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
e760: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
e770: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
e780: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
e790: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
e7a0: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
e7b0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
e7c0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
e7d0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e7e0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
e7f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
e800: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
e810: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
e820: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
e830: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
e840: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
e850: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
e860: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
e870: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
e880: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
e890: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
e8a0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
e8b0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
e8c0: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
e8d0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
e8e0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
e8f0: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
e900: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
e910: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
e920: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
e930: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
e940: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
e950: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
e960: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
e970: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
e980: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
e990: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
e9a0: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
e9b0: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
e9c0: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
e9d0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
e9e0: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
e9f0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
ea00: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
ea10: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
ea20: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
ea30: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
ea40: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
ea50: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
ea60: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
ea70: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
ea80: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
ea90: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
eaa0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
eab0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
eac0: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
ead0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
eae0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
eaf0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
eb00: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
eb10: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
eb20: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
eb30: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
eb40: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
eb50: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
eb60: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
eb70: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
eb80: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
eb90: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
eba0: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
ebb0: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
ebc0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
ebd0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
ebe0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
ebf0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
ec00: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
ec10: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
ec20: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
ec30: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
ec40: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
ec50: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
ec60: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
ec70: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
ec80: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
ec90: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
eca0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
ecb0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
ecc0: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
ecd0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
ece0: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
ecf0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
ed00: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
ed10: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
ed20: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
ed30: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
ed40: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
ed50: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
ed60: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
ed70: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
ed80: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
ed90: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
eda0: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
edb0: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
edc0: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
edd0: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
ede0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
edf0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
ee00: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
ee10: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
ee20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ee30: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
ee40: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
ee50: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
ee60: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
ee70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ee80: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
ee90: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
eea0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
eeb0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
eec0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
eed0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
eee0: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
eef0: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ef10: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
ef20: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
ef30: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
ef40: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
ef50: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
ef60: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
ef70: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
ef80: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
ef90: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
efa0: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
efb0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
efc0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
efd0: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
efe0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
eff0: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
f000: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
f010: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
f020: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
f030: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
f040: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
f050: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f060: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
f070: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f080: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
f090: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
f0a0: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
f0b0: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
f0c0: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
f0d0: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
f0e0: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
f0f0: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
f100: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
f110: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
f120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f130: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
f140: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
f150: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
f160: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f170: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
f180: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
f190: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
f1a0: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
f1b0: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
f1c0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
f1d0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
f1e0: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
f1f0: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f210: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
f220: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
f230: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
f240: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f250: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
f260: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
f270: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
f280: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
f290: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
f2a0: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
f2b0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
f2c0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
f2d0: 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
f2e0: 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
f2f0: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
f300: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
f310: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
f320: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
f330: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
f340: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
f350: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
f360: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
f370: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
f380: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
f390: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
f3a0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
f3b0: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f3c0: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
f3d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
f3e0: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
f3f0: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
f400: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f410: 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
f420: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
f430: 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
f440: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
f450: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
f460: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
f470: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
f480: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
f490: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
f4a0: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
f4b0: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
f4c0: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
f4d0: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
f4e0: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
f4f0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
f500: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
f510: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
f520: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
f530: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
f540: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
f550: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
f560: 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
f570: 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
f580: 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
f590: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
f5a0: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
f5b0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
f5c0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
f5d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
f5e0: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
f5f0: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
f600: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
f610: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
f620: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
f630: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
f640: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
f650: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
f660: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
f670: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
f680: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
f690: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
f6a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
f6b0: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
f6c0: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
f6d0: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
f6e0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
f6f0: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
f700: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
f710: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
f720: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
f730: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f740: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
f750: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
f760: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
f770: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
f780: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
f790: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
f7a0: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
f7b0: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
f7c0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
f7d0: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
f7e0: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
f7f0: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
f800: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
f810: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
f820: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
f830: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
f840: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
f850: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
f860: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
f870: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
f880: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f890: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
f8a0: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
f8b0: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
f8c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
f8d0: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
f8e0: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
f8f0: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
f900: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
f910: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
f920: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
f930: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
f940: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
f950: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
f960: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
f970: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
f980: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
f990: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
f9a0: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
f9b0: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
f9c0: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
f9d0: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
f9e0: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
f9f0: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
fa00: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
fa10: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
fa20: 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
fa30: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
fa40: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
fa50: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
fa60: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
fa70: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
fa80: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
fa90: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
faa0: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
fab0: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
fac0: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
fad0: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
fae0: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
faf0: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
fb00: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
fb10: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
fb20: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
fb30: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
fb40: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
fb50: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
fb60: 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
fb70: 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
fb80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fb90: 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
fba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fbb0: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
fbc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fbd0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
fbe0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fbf0: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
fc00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fc10: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
fc20: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
fc30: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
fc40: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
fc50: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
fc60: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
fc70: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
fc80: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
fc90: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
fca0: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
fcb0: 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
fcc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
fcd0: 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
fce0: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
fcf0: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
fd00: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
fd10: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
fd20: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
fd30: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
fd40: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
fd50: 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
fd60: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
fd70: 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
fd80: 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
fd90: 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
fda0: 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
fdb0: 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
fdc0: 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
fdd0: 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
fde0: 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
fdf0: 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
fe00: 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
fe10: 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
fe20: 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
fe30: 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
fe40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
fe50: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
fe60: 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
fe70: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
fe80: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
fe90: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
fea0: 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
feb0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
fec0: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
fed0: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
fee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
fef0: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
ff00: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
ff10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
ff20: 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
ff30: 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
ff40: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
ff50: 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
ff60: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
ff70: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
ff80: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
ff90: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
ffa0: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
ffb0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
ffc0: 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
ffd0: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
ffe0: 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
fff0: 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
10000 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
10010 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
10020 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10030 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
10040 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
10050 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
10060 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
10070 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
10080 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
10090 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
100a0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
100b0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
100c0 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
100d0 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
100e0 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
100f0 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
10100 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
10110 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
10120 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
10130 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10140 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
10150 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
10160 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
10170 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
10180 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
10190 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
101a0 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
101b0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
101c0 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
101d0 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
101e0 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
101f0 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
10200 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
10210 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
10220 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
10230 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
10240 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
10250 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
10260 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
10270 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
10280 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
10290 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
102a0 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
102b0 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
102c0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
102d0 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
102e0 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
102f0 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
10300 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
10310 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
10320 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
10330 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
10340 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
10350 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
10360 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
10370 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
10380 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
10390 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
103a0 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
103b0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
103c0 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
103d0 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
103e0 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
103f0 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
10400 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
10410 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
10420 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
10430 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
10440 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
10450 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
10460 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
10470 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
10480 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
10490 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
104a0 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
104b0 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
104c0 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
104d0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
104e0 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
104f0 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
10500 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
10510 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
10520 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
10530 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
10540 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
10550 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
10560 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
10570 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
10580 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
10590 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
105a0 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
105b0 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
105c0 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
105d0 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
105e0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
105f0 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
10600 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
10610 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
10620 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
10630 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
10640 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
10650 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
10660 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
10670 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
10680 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
10690 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
106a0 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
106b0 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
106c0 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
106d0 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
106e0 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
106f0 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
10700 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
10710 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
10720 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
10730 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
10740 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
10750 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
10760 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
10770 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
10780 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
10790 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
107a0 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
107b0 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
107c0 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
107d0 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
107e0 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
107f0 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
10800 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
10810 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
10820 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
10830 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
10840 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
10850 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
10860 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
10870 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
10880 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
10890 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
108a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
108b0 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
108c0 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
108d0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
108e0 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
108f0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
10900 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
10910 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
10920 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
10930 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
10940 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
10950 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
10960 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
10970 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
10980 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
10990 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
109a0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
109b0 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
109c0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
109e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
109f0 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
10a00 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
10a10 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
10a20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
10a30 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
10a40 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
10a50 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
10a60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
10a70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
10a80 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
10a90 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
10aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
10ab0 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
10ac0 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
10ad0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
10ae0 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
10af0 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
10b00 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
10b10 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
10b20 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10b30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10b40 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
10b50 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
10b60 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
10b70 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
10b80 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
10b90 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
10ba0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
10bb0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
10bc0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
10bd0 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
10be0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
10bf0 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
10c00 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
10c10 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
10c20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
10c30 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
10c40 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
10c50 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
10c60 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
10c70 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
10c80 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
10c90 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
10ca0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
10cb0 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
10cc0 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
10cd0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
10ce0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
10cf0 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
10d00 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
10d10 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
10d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d30 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
10d40 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
10d50 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
10d60 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
10d70 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
10d80 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
10d90 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
10da0 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
10db0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
10dc0 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
10dd0 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
10de0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
10df0 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
10e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10e10 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10e20 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
10e30 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
10e40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10e50 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
10e60 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
10e70 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
10e80 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
10e90 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
10ea0 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
10eb0 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
10ec0 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
10ed0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
10ee0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
10ef0 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
10f00 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
10f10 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
10f20 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
10f30 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
10f40 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
10f50 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
10f60 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
10f70 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
10f80 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
10f90 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
10fa0 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
10fb0 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
10fc0 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
10fd0 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
10fe0 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
10ff0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11000 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
11010 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
11020 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
11030 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
11040 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
11050 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
11060 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11070 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
11080 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
11090 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
110a0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
110b0 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
110c0 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
110d0 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
110e0 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
110f0 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
11100 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
11110 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
11120 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
11130 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
11140 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
11150 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
11160 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
11170 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
11180 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11190 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
111a0 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
111b0 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
111c0 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
111d0 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
111e0 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
111f0 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
11200 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
11210 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
11220 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
11230 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
11240 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65  applies to table
11250 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68  s or view that h
11260 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
11270 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
11280 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
11290 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
112a0 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
112b0 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
112c0 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
112d0 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
112e0 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
112f0 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
11300 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
11310 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
11320 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
11330 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
11340 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
11350 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
11360 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
11370 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
11380 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
11390 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
113a0 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
113b0 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
113c0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
113d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
113e0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
113f0 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
11400 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
11410 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
11420 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
11430 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
11440 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
11450 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
11460 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
11470 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
11480 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
11490 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
114a0 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
114b0 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
114c0 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
114d0 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
114e0 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
114f0 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
11500 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
11510 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
11520 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
11530 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
11540 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
11550 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
11560 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
11570 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
11580 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
11590 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
115a0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
115b0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
115c0 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
115d0 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
115e0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
115f0 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
11600 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
11610 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
11620 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
11630 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
11640 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
11650 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
11660 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
11670 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
11680 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
11690 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
116a0 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
116b0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
116c0 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
116d0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
116e0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
116f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
11700 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
11710 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
11720 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
11730 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
11740 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
11750 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
11760 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
11770 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
11780 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
11790 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
117a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
117b0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
117c0 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
117d0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
117e0 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
117f0 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
11800 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
11810 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
11820 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
11830 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
11840 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
11850 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
11860 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
11870 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
11880 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
11890 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
118a0 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
118b0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
118c0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
118d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
118e0 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
118f0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
11900 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
11910 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
11920 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
11930 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
11940 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
11950 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
11960 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
11970 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
11980 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
11990 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
119a0 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
119b0 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
119c0 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
119d0 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
119e0 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
119f0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
11a00 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
11a10 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
11a20 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
11a30 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
11a40 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
11a50 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
11a60 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
11a70 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
11a80 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11a90 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
11aa0 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
11ab0 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
11ac0 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
11ad0 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
11ae0 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
11af0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
11b00 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
11b10 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
11b20 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
11b30 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
11b40 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
11b50 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
11b60 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
11b70 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
11b80 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
11b90 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
11ba0 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
11bb0 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
11bc0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
11bd0 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
11be0 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
11bf0 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
11c00 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
11c10 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
11c20 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
11c30 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
11c40 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
11c50 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
11c60 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
11c70 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
11c80 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
11c90 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
11ca0 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
11cb0 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
11cc0 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
11cd0 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
11ce0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
11cf0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11d00 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
11d10 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
11d20 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
11d30 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
11d40 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
11d50 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
11d60 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
11d70 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
11d80 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
11d90 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
11da0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
11db0 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
11dc0 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
11dd0 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
11de0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
11df0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
11e00 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
11e10 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
11e20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
11e30 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
11e40 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
11e50 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
11e60 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
11e70 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
11e80 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
11e90 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
11ea0 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
11eb0 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
11ec0 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
11ed0 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
11ee0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
11ef0 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
11f00 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
11f10 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
11f20 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
11f30 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
11f40 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
11f50 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
11f60 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
11f70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
11f80 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
11f90 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
11fa0 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
11fb0 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
11fc0 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
11fd0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
11fe0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
11ff0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12000 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
12010 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
12020 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
12030 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
12040 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
12050 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
12060 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
12070 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
12080 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
12090 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
120a0 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
120b0 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
120c0 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
120d0 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
120e0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
120f0 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
12100 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
12110 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
12120 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
12130 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
12140 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
12150 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
12160 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
12170 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
12180 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
12190 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
121a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
121b0 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
121c0 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
121d0 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
121e0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
121f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
12200 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
12210 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
12220 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
12230 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
12240 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
12250 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
12260 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
12270 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
12280 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12290 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
122a0 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
122b0 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
122c0 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
122d0 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
122e0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
122f0 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
12300 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
12310 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
12320 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
12330 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
12340 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
12350 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
12360 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
12370 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
12380 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
12390 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
123a0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
123b0 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
123c0 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
123d0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
123e0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
123f0 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
12400 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
12410 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
12420 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
12430 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
12440 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
12450 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
12460 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
12470 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
12480 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
12490 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
124a0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
124b0 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
124c0 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
124d0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
124e0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
124f0 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
12500 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
12510 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
12520 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
12530 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
12540 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
12550 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
12560 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
12570 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
12580 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
12590 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
125a0 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
125b0 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
125c0 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
125d0 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
125e0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
125f0 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
12600 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
12610 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
12620 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
12630 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
12640 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
12650 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
12660 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
12670 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
12680 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
12690 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
126a0 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
126b0 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
126c0 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
126d0 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
126e0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
126f0 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
12700 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
12710 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
12720 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
12730 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
12740 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
12750 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
12760 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
12770 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
12780 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
12790 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
127a0 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
127b0 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
127c0 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
127d0 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
127e0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
127f0 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
12800 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
12810 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
12820 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
12830 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
12840 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
12850 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
12860 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
12870 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
12880 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
12890 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
128a0 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
128b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
128c0 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
128d0 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
128e0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
128f0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
12900 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
12910 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
12920 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
12930 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
12940 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
12950 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
12960 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
12970 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
12980 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
12990 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
129a0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
129b0 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
129c0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
129d0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
129e0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
129f0 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
12a00 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
12a10 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
12a20 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
12a30 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
12a40 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
12a50 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
12a60 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
12a70 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
12a80 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
12a90 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
12aa0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
12ab0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
12ac0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
12ad0 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
12ae0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
12af0 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
12b00 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
12b10 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
12b20 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
12b30 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
12b40 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
12b50 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
12b60 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
12b70 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
12b80 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
12b90 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
12ba0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
12bb0 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
12bc0 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
12bd0 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
12be0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
12bf0 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
12c00 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
12c10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12c20 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
12c30 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
12c40 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
12c50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
12c60 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
12c70 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
12c80 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
12c90 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
12ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12cb0 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
12cc0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
12cd0 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
12ce0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12cf0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
12d00 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
12d10 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
12d20 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
12d30 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
12d40 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
12d50 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
12d60 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
12d70 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
12d80 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
12d90 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
12da0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
12db0 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
12dc0 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
12dd0 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
12de0 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
12df0 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
12e00 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
12e10 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
12e20 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
12e30 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
12e40 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
12e50 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
12e60 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
12e70 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
12e80 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
12e90 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
12ea0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
12eb0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
12ec0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
12ed0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
12ee0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
12ef0 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
12f00 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
12f10 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
12f20 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
12f30 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
12f40 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
12f50 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
12f60 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
12f70 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
12f80 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
12f90 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
12fa0 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
12fb0 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
12fc0 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
12fd0 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
12fe0 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
12ff0 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
13000 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
13010 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
13020 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
13030 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
13040 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
13050 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
13060 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
13070 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
13080 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
13090 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
130a0 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
130b0 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
130c0 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
130d0 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
130e0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
130f0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
13100 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
13110 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
13120 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
13130 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
13140 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
13150 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
13160 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
13170 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
13180 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
13190 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
131a0 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
131b0 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
131c0 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
131d0 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
131e0 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
131f0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
13200 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
13210 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
13220 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
13230 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
13240 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
13250 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
13260 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
13270 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
13280 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
13290 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
132a0 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
132b0 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
132c0 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
132d0 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
132e0 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
132f0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
13300 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
13310 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
13320 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
13330 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
13340 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
13350 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
13360 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
13370 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
13380 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
13390 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
133a0 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
133b0 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
133c0 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
133d0 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
133e0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
133f0 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
13400 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
13410 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
13420 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
13430 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
13440 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
13450 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
13460 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
13470 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
13480 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
13490 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
134a0 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
134b0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
134c0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
134d0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
134e0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
134f0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
13500 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
13510 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
13520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13530 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
13540 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
13550 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
13560 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
13570 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
13580 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
13590 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
135a0 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
135b0 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
135c0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
135d0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
135e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
135f0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
13600 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
13610 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
13620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
13630 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
13640 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
13650 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
13660 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
13670 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
13680 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
13690 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
136a0 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
136b0 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
136c0 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
136d0 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
136e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
136f0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
13700 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
13710 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
13720 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
13730 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
13740 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
13750 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
13760 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
13770 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
13780 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
13790 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
137a0 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
137b0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
137c0 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
137d0 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
137e0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
137f0 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
13800 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
13810 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
13820 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
13830 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
13840 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
13850 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
13860 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
13870 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
13880 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
13890 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
138a0 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
138b0 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
138c0 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
138d0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
138e0 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
138f0 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
13900 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
13910 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
13920 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
13930 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
13940 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
13950 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
13960 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
13970 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
13980 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
13990 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
139a0 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
139b0 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
139c0 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
139d0 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
139e0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
139f0 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
13a00 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
13a10 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
13a20 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
13a30 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
13a40 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
13a50 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
13a60 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
13a70 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
13a80 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
13a90 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
13aa0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
13ab0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
13ac0 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
13ad0 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
13ae0 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
13af0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
13b00 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
13b10 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
13b20 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
13b30 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
13b40 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
13b50 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
13b60 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
13b70 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
13b80 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
13b90 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
13ba0 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
13bb0 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
13bc0 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
13bd0 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
13be0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
13bf0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
13c00 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
13c10 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
13c20 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
13c30 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
13c40 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
13c50 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
13c60 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
13c70 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
13c80 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
13c90 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
13ca0 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
13cb0 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
13cc0 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
13cd0 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
13ce0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
13cf0 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
13d00 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
13d10 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
13d20 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
13d30 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
13d40 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
13d50 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
13d60 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
13d70 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
13d80 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
13d90 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
13da0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
13db0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
13dc0 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
13dd0 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
13de0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
13df0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
13e00 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
13e10 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
13e20 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
13e30 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
13e40 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
13e50 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
13e60 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
13e70 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
13e80 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
13e90 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
13ea0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
13eb0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
13ec0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
13ed0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
13ee0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
13ef0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
13f00 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
13f10 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
13f20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
13f30 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
13f40 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
13f50 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
13f60 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
13f70 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
13f80 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
13f90 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
13fa0 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
13fb0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
13fc0 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
13fd0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
13fe0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
13ff0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
14000 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
14010 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
14020 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
14030 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
14040 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
14050 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
14060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
14070 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
14080 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
14090 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
140a0 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
140b0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
140c0 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
140d0 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
140e0 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
140f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14100 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
14110 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
14120 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
14130 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14140 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
14150 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
14160 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
14170 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14180 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
14190 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
141a0 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
141b0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
141c0 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
141d0 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
141e0 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
141f0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
14200 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
14210 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
14220 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
14230 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
14240 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
14250 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
14260 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
14270 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
14280 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
14290 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
142a0 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
142b0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
142c0 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
142d0 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
142e0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
142f0 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
14300 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
14310 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
14320 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
14330 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
14340 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
14350 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
14360 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
14370 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
14380 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
14390 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
143a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
143b0 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
143c0 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
143d0 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
143e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
143f0 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
14400 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
14410 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14420 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
14430 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
14440 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
14450 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
14460 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
14470 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
14480 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
14490 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
144a0 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
144b0 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
144c0 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
144d0 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
144e0 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
144f0 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
14500 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
14510 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
14520 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
14530 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
14540 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
14550 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
14560 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
14570 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14580 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
14590 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
145a0 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
145b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
145c0 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
145d0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
145e0 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
145f0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
14600 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
14610 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
14620 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
14630 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
14640 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
14650 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
14660 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
14670 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
14680 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
14690 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
146a0 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
146b0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
146c0 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
146d0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
146e0 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
146f0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
14700 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
14710 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
14720 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
14730 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
14740 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
14750 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
14760 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
14770 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
14780 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
14790 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
147a0 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
147b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
147c0 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
147d0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
147e0 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
147f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
14800 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
14810 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
14820 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
14830 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
14840 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
14850 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
14860 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
14870 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
14880 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
14890 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
148a0 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
148b0 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
148c0 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
148d0 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
148e0 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
148f0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
14900 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
14910 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
14920 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
14930 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
14940 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
14950 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
14960 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
14970 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
14980 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
14990 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
149a0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
149b0 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
149c0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
149d0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
149e0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
149f0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
14a00 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
14a10 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
14a20 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
14a30 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
14a40 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
14a50 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
14a60 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
14a70 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
14a80 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
14a90 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
14aa0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
14ab0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
14ac0 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
14ad0 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
14ae0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
14af0 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
14b00 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
14b10 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
14b20 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
14b30 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
14b40 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
14b50 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
14b60 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
14b70 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
14b80 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
14b90 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
14ba0 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
14bb0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
14bc0 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
14bd0 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
14be0 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
14bf0 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
14c00 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
14c10 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
14c20 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
14c30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
14c40 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
14c50 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
14c60 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
14c70 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
14c80 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
14c90 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
14ca0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
14cb0 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
14cc0 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
14cd0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
14ce0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
14cf0 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
14d00 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
14d10 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
14d20 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
14d30 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
14d40 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
14d50 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
14d60 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
14d70 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
14d80 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
14d90 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
14da0 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
14db0 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
14dc0 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
14dd0 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
14de0 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
14df0 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
14e00 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
14e10 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
14e20 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
14e30 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
14e40 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
14e50 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
14e60 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
14e70 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
14e80 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
14e90 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
14ea0 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
14eb0 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
14ec0 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
14ed0 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
14ee0 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
14f10 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
14f20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
14f30 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
14f40 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
14f50 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
14f60 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
14f70 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
14f80 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fa0 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
14fb0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
14fc0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
14fd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
14fe0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
14ff0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
15000 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
15010 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
15020 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
15030 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
15040 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
15050 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
15060 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15070 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
15080 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
15090 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
150a0 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
150b0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
150c0 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
150d0 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
150e0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
150f0 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
15100 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
15110 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
15120 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
15130 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
15140 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
15150 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15160 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
15170 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
15180 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
15190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
151a0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
151b0 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
151c0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
151d0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
151e0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
151f0 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
15200 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15210 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
15220 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
15230 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
15240 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15250 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
15260 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
15270 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
15280 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
15290 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
152a0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
152b0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
152c0 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
152d0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
152e0 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
152f0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15300 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
15310 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
15320 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
15330 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
15340 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15350 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
15360 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
15370 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
153a0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
153b0 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
153c0 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
153f0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
15400 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
15410 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
15420 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
15430 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
15440 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15450 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
15460 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
15470 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15480 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
15490 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
154a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
154b0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
154c0 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
154d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
154e0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
154f0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
15500 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
15510 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
15520 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
15530 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
15540 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
15550 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
15560 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
15570 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
15580 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15590 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
155a0 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
155b0 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
155c0 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
155d0 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
155e0 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
155f0 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
15600 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
15610 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
15620 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
15630 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
15640 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
15650 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
15660 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
15670 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
15680 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
15690 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
156a0 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
156b0 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
156c0 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
156d0 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
156e0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
156f0 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
15700 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
15710 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
15720 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
15730 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
15740 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
15750 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
15760 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
15770 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
15780 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
15790 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
157a0 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
157b0 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
157c0 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
157d0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
157e0 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
157f0 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
15800 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
15810 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
15820 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
15830 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
15840 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
15850 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
15860 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
15870 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
15880 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
15890 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
158a0 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
158b0 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
158c0 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
158d0 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
158e0 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
158f0 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
15900 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
15910 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
15920 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
15930 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
15940 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
15950 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
15960 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
15970 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
15980 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
15990 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
159a0 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
159b0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
159c0 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
159d0 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
159e0 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
159f0 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
15a00 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
15a10 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
15a20 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
15a30 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
15a40 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
15a50 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
15a60 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
15a70 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
15a80 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
15a90 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
15aa0 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
15ab0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15ac0 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
15ad0 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
15ae0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
15af0 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
15b00 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
15b10 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
15b20 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
15b30 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
15b40 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
15b50 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
15b60 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
15b70 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
15b80 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
15b90 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
15ba0 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
15bb0 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
15bc0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15bd0 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
15be0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15bf0 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
15c00 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
15c10 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
15c20 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
15c30 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
15c40 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
15c50 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
15c60 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
15c70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
15c80 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
15c90 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
15ca0 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
15cb0 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
15cc0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
15cd0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
15ce0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
15cf0 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
15d00 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
15d10 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
15d20 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
15d30 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
15d40 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
15d50 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
15d60 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
15d70 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
15d80 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
15d90 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
15da0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
15db0 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
15dc0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
15dd0 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
15de0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
15df0 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
15e00 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
15e10 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
15e20 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
15e30 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
15e40 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
15e50 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
15e60 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
15e70 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
15e80 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
15e90 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
15ea0 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
15eb0 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
15ec0 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
15ed0 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
15ee0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
15ef0 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
15f00 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
15f10 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
15f20 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
15f30 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
15f40 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
15f50 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
15f60 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
15f70 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
15f80 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
15f90 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
15fa0 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
15fb0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
15fc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
15fd0 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
15fe0 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
15ff0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
16000 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
16010 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
16020 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
16030 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
16040 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
16050 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
16060 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
16070 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
16080 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
16090 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
160a0 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
160b0 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
160c0 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
160d0 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
160e0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
160f0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
16100 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
16110 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
16120 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
16130 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
16140 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
16150 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
16160 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
16170 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
16180 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
16190 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
161a0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
161b0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
161c0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
161d0 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
161e0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
161f0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
16200 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
16210 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
16220 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
16230 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
16240 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
16250 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
16260 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
16270 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
16280 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
16290 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
162a0 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
162b0 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
162c0 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
162d0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
162e0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
162f0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
16300 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
16310 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
16320 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
16330 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
16340 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
16350 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
16360 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
16370 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
16380 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
16390 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
163a0 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
163b0 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
163c0 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
163d0 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
163e0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
163f0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
16400 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
16410 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
16420 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
16430 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
16440 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
16450 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
16460 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
16470 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
16480 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
16490 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
164a0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
164b0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
164c0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
164d0 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
164f0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
16500 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
16510 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
16520 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
16530 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
16540 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
16550 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
16560 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
16570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16580 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
16590 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
165a0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
165b0 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
165c0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
165d0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
165e0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
165f0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
16600 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
16610 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
16620 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
16630 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
16640 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
16650 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
16660 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
16670 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
16680 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
16690 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
166a0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
166b0 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
166c0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
166d0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
166e0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
166f0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
16700 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
16710 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
16720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16750 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
16760 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
16770 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
16780 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
16790 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
167a0 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
167b0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
167c0 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
167d0 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
167e0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
167f0 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
16800 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
16810 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
16820 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
16830 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
16840 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
16850 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
16860 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
16870 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
16880 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
16890 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
168a0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
168b0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
168c0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
168d0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
168e0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
168f0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
16900 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
16910 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
16920 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
16930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
16960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
16970 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
16980 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
16990 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
169a0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
169b0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
169c0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
169d0 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
169e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
169f0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
16a00 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
16a10 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
16a20 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
16a30 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
16a40 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
16a50 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
16a80 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
16a90 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16ab0 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
16ac0 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
16ad0 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20  likelihood */.  
16ae0 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
16af0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
16b00 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
16b10 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
16b20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b30 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
16b40 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
16b50 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
16b60 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69  ys >= 1). */.  i
16b70 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
16b80 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
16b90 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
16ba0 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
16bb0 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
16bc0 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
16bd0 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
16be0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
16bf0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
16c00 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16c20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
16c30 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
16c40 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
16c70 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
16c80 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
16cb0 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
16cc0 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
16cd0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
16ce0 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
16cf0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
16d00 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
16d10 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
16d20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16d30 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
16d40 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
16d50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
16d60 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
16d70 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
16d80 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
16d90 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
16da0 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
16db0 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
16dc0 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
16dd0 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
16de0 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
16df0 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
16e00 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
16e10 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
16e20 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
16e30 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
16e40 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
16e50 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
16e60 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
16e70 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
16e80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72  */.#define EP_Er
16e90 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38  ror     0x000008
16ea0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63   /* Expression c
16eb0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
16ec0 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ore errors */.#d
16ed0 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
16ee0 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
16ef0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16f00 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
16f10 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
16f20 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
16f30 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
16f40 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
16f50 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
16f60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
16f70 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
16f80 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
16f90 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
16fa0 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
16fb0 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
16fc0 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
16fd0 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
16fe0 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
16ff0 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
17000 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
17010 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
17020 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
17030 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
17040 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
17050 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
17060 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
17070 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
17080 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
17090 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
170a0 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
170b0 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
170c0 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
170d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
170e0 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
170f0 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
17100 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
17110 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
17120 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
17130 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
17140 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
17150 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
17160 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
17170 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
17180 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
17190 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
171a0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
171b0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
171c0 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
171d0 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
171e0 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
171f0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
17200 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
17210 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
17220 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
17230 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
17240 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
17250 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
17260 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
17270 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
17280 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
17290 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
172a0 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
172b0 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
172c0 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
172d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
172e0 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
172f0 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
17300 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
17310 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17320 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
17330 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
17340 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
17350 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
17360 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17370 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
17380 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
17390 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
173a0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
173b0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
173c0 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
173d0 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
173e0 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
173f0 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
17400 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
17410 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
17420 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
17430 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
17440 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62  n */../*.** Comb
17450 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20  inations of two 
17460 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61  or more EP_* fla
17470 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  gs.*/.#define EP
17480 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
17490 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
174a0 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65  ry) /* Propagate
174b0 20 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74   these bits up t
174c0 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ree */../*.** Th
174d0 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
174e0 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
174f0 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
17500 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  ts in the.** Exp
17510 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
17520 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
17530 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
17540 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
17550 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
17560 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
17570 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
17580 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
17590 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
175a0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
175b0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
175c0 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
175d0 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
175e0 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
175f0 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
17600 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
17610 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
17620 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
17630 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
17640 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
17650 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
17660 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
17670 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
17680 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
17690 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
176a0 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
176b0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
176c0 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
176d0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
176e0 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
176f0 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
17700 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
17710 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
17720 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
17730 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
17740 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
17750 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
17760 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
17770 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
17780 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
17790 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
177a0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
177b0 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
177c0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
177d0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
177e0 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
177f0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
17800 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
17810 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
17820 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
17830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
17840 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
17850 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
17860 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
17870 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
17880 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
17890 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
178a0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
178b0 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
178c0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
178d0 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
178e0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
178f0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
17900 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
17910 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
17920 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
17930 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
17940 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
17950 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
17960 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
17970 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
17980 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
17990 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
179a0 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
179b0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
179c0 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
179d0 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
179e0 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
179f0 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
17a00 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
17a10 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
17a20 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
17a30 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
17a40 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
17a50 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
17a60 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
17a70 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
17a80 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
17a90 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
17aa0 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
17ab0 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
17ac0 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
17ad0 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
17ae0 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
17af0 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
17b00 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
17b10 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
17b20 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
17b30 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
17b40 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
17b50 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17b60 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
17b70 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
17b80 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
17b90 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
17ba0 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
17bb0 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
17bc0 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
17bd0 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
17be0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
17bf0 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
17c00 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
17c10 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
17c20 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
17c30 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
17c40 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
17c50 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
17c60 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
17c70 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
17c80 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
17c90 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
17ca0 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
17cb0 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
17cc0 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
17cd0 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
17ce0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
17cf0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
17d00 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
17d10 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
17d20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
17d30 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
17d40 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
17d50 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
17d60 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
17d70 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
17d80 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
17d90 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
17da0 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
17db0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
17dc0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17de0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
17df0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
17e00 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
17e10 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
17e20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
17e30 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
17e40 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
17e50 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
17e60 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
17e70 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
17e80 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
17e90 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
17ea0 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
17eb0 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
17ec0 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
17ed0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
17ee0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
17ef0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
17f00 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
17f10 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
17f20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
17f30 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
17f40 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
17f50 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
17f60 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
17f70 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
17f80 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
17f90 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
17fa0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
17fb0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
17fc0 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
17fd0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
17fe0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
17ff0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
18000 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
18010 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
18020 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
18030 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
18040 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
18050 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
18060 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18080 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
18090 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
180a0 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
180b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
180c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
180d0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
180e0 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
180f0 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
18100 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
18110 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
18120 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
18130 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
18140 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
18150 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
18160 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
18170 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
18180 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
18190 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
181a0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
181b0 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
181c0 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
181d0 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
181e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
181f0 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
18200 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
18210 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
18220 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
18230 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
18240 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
18250 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
18260 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
18270 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
18280 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
18290 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
182a0 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
182b0 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
182c0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
182d0 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
182e0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
182f0 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
18300 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
18310 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
18320 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
18330 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
18340 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
18350 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
18360 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
18370 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
18380 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
18390 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
183a0 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
183b0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
183c0 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
183d0 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
183e0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
183f0 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
18400 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
18410 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
18420 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
18430 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
18440 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
18450 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
18460 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
18470 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
18480 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
18490 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
184a0 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
184b0 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
184c0 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
184d0 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
184e0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
184f0 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
18500 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18510 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
18520 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
18530 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
18540 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
18550 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
18560 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
18570 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
18580 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
18590 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
185a0 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
185b0 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
185c0 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
185d0 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
185e0 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
185f0 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
18600 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
18610 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
18620 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
18630 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  6..*/.#ifdef SQL
18640 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
18650 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54  .  typedef SQLIT
18660 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42  E_BITMASK_TYPE B
18670 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20  itmask;.#else.  
18680 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
18690 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ask;.#endif../*.
186a0 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
186b0 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
186c0 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
186d0 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
186e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
186f0 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
18700 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
18710 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
18720 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
18730 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
18740 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
18750 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
18760 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
18770 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
18780 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20  #define ALLBITS 
18790 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d       ((Bitmask)-
187a0 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  1)../*.** The fo
187b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
187c0 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
187d0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
187e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
187f0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
18800 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
18810 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
18820 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
18830 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
18840 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
18850 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
18860 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
18870 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
18880 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
18890 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
188a0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
188b0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
188c0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
188d0 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
188e0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
188f0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
18900 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
18910 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
18920 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
18930 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
18940 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
18950 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
18960 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
18970 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
18980 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
18990 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
189a0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
189b0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
189c0 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
189d0 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
189e0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
189f0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
18a00 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
18a10 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
18a20 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
18a30 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
18a40 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
18a50 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
18a60 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
18a70 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
18a80 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
18a90 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
18aa0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
18ab0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
18ac0 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
18ad0 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
18ae0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
18af0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
18b00 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
18b10 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
18b20 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
18b30 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
18b40 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
18b50 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
18b60 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
18b70 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
18b80 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
18b90 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
18ba0 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
18bb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18bc0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
18bd0 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
18be0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
18bf0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
18c00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
18c10 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
18c20 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
18c30 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
18c40 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
18c50 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
18c60 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
18c70 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
18c80 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
18c90 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
18ca0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
18cb0 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
18cc0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
18cd0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
18ce0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
18cf0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
18d00 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
18d10 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
18d20 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
18d30 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
18d40 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
18d50 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
18d60 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
18d70 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
18d80 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
18d90 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
18da0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
18db0 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
18dc0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
18dd0 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
18de0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
18df0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
18e00 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
18e10 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
18e20 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
18e30 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
18e40 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
18e50 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
18e60 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
18e70 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
18e80 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
18e90 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
18ea0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
18eb0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
18ec0 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
18ed0 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
18ee0 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
18ef0 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
18f00 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
18f10 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
18f20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
18f30 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
18f40 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
18f50 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
18f60 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
18f70 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
18f80 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
18f90 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
18fa0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
18fb0 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
18fc0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
18fd0 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
18fe0 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
18ff0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
19000 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
19010 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
19020 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
19030 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
19040 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
19050 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
19060 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
19070 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
19080 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
19090 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
190a0 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
190b0 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
190c0 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
190d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
190e0 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
190f0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
19100 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
19110 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
19120 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
19130 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
19140 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
19150 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
19160 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
19170 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
19180 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
19190 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
191a0 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
191b0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
191c0 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
191d0 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
191e0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
191f0 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
19200 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
19210 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
19220 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
19230 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
19240 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
19250 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
19260 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
19270 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
19280 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
19290 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
192a0 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
192b0 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
192c0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
192d0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
192e0 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
192f0 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
19300 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
19310 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
19320 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
19330 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
19340 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
19350 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
19360 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
19370 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
19380 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
19390 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
193a0 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
193b0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
193c0 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
193d0 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
193e0 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
193f0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
19400 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
19410 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
19420 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
19430 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
19440 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
19450 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
19460 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
19470 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
19480 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
19490 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
194a0 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
194b0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
194c0 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
194d0 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
194e0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
194f0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
19500 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
19510 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
19520 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
19530 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
19540 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
19550 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
19560 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
19570 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
19580 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
19590 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
195a0 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
195b0 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
195c0 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
195d0 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
195e0 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  member..*/.#defi
195f0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
19600 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
19610 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
19620 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
19630 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
19640 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
19650 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
19660 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
19670 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
19680 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
19690 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
196a0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
196b0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
196c0 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
196d0 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
196e0 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
196f0 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
19700 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
19710 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
19720 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f  S_OK    0x0008 /
19730 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
19740 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
19750 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
19760 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43  HERE_OMIT_OPEN_C
19770 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20  LOSE  0x0010 /* 
19780 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72  Table cursors ar
19790 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a  e already open *
197a0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
197b0 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20  FORCE_TABLE     
197c0 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f   0x0020 /* Do no
197d0 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f  t use an index-o
197e0 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64  nly search */.#d
197f0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54  efine WHERE_ONET
19800 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30  ABLE_ONLY    0x0
19810 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65  040 /* Only code
19820 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69   the 1st table i
19830 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64  n pTabList */.#d
19840 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41  efine WHERE_NO_A
19850 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30  UTOINDEX     0x0
19860 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20  080 /* Disallow 
19870 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65  automatic indexe
19880 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
19890 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
198a0 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f      0x0100 /* pO
198b0 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
198c0 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
198d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
198e0 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
198f0 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0200 /* pOrderby
19900 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
19910 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
19920 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
19930 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
19940 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0400 /* All out
19950 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
19960 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
19970 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
19980 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38 30  GROUP      0x080
19990 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
199a0 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
199b0 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
199c0 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20  HERE_REOPEN_IDX 
199d0 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20        0x1000 /* 
199e0 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65  Try to use OP_Re
199f0 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64 65 66 69  openIdx */.#defi
19a00 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
19a10 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32 30 30 30  _MULTIROW 0x2000
19a20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
19a30 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
19a40 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
19a50 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
19a60 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a         0x4000 /*
19a70 20 54 68 65 72 65 20 69 73 20 61 20 63 6f 6e 73   There is a cons
19a80 74 61 6e 74 20 4c 49 4d 49 54 20 63 6c 61 75 73  tant LIMIT claus
19a90 65 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  e */../* Allowed
19aa0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
19ab0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
19ac0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
19ad0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
19ae0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
19af0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
19b00 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
19b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
19b20 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
19b30 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
19b40 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
19b50 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
19b60 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
19b70 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
19b80 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
19b90 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
19ba0 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
19bb0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
19bc0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
19bd0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
19be0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
19bf0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
19c00 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
19c10 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
19c20 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
19c30 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
19c40 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
19c50 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
19c60 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
19c70 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
19c80 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
19c90 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
19ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
19cb0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
19cc0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
19cd0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
19ce0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
19cf0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
19d00 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
19d10 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
19d20 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
19d30 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
19d40 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
19d50 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
19d60 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
19d70 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
19d80 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
19d90 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
19da0 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
19db0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
19dc0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
19dd0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
19de0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
19df0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
19e00 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
19e10 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
19e20 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
19e30 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
19e40 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
19e50 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
19e60 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
19e70 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
19e80 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
19e90 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
19ea0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
19eb0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
19ec0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
19ed0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
19ee0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
19ef0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
19f00 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
19f10 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
19f20 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
19f30 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
19f40 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
19f50 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
19f60 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
19f70 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
19f80 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
19f90 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
19fa0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
19fb0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
19fc0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
19fd0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
19fe0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
19ff0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1a000 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1a010 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1a020 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1a030 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1a040 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1a050 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1a060 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1a070 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1a080 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1a090 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1a0a0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
1a0b0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1a0c0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1a0d0 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1a0e0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
1a0f0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
1a100 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
1a110 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
1a120 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
1a130 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
1a140 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1a150 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1a160 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1a170 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1a180 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1a190 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a1a0 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1a1b0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1a1c0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a1e0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1a1f0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1a200 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1a210 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1a220 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1a230 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1a240 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1a250 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1a260 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1a270 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1a280 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1a290 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
1a2a0 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
1a2b0 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
1a2c0 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
1a2d0 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
1a2e0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1a2f0 58 2e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  X..**.*/.#define
1a300 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1a310 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1a320 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1a330 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1a340 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1a350 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  gg    0x0002  /*
1a360 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1a370 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1a380 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1a390 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1a3a0 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1a3b0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1a3c0 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1a3d0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1a3e0 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1a3f0 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1a400 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1a410 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1a420 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1a430 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
1a440 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  010  /* True if 
1a450 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
1a460 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
1a470 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1a480 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1a490 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1a4a0 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1a4b0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1a4c0 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61  #define NC_MinMa
1a4d0 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20  xAgg 0x1000  /* 
1a4e0 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74  min/max aggregat
1a4f0 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f  es seen.  See no
1a500 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a  te above */../*.
1a510 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1a520 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1a530 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1a540 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
1a550 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
1a560 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
1a570 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
1a580 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
1a590 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
1a5a0 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
1a5b0 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
1a5c0 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
1a5d0 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
1a5e0 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
1a5f0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
1a600 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
1a610 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1a620 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
1a630 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
1a640 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
1a650 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
1a660 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
1a670 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
1a680 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
1a690 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
1a6a0 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
1a6b0 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
1a6c0 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
1a6d0 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
1a6e0 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
1a6f0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1a700 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1a710 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1a720 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1a730 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1a740 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1a750 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1a760 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1a770 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1a780 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1a790 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1a7a0 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1a7b0 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1a7c0 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1a7d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a7e0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1a7f0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1a800 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1a810 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1a820 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1a830 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1a840 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1a850 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1a860 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1a870 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1a880 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1a890 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1a8a0 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1a8b0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1a8c0 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1a8d0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1a8e0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1a8f0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1a900 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1a910 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1a920 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1a930 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1a940 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1a950 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1a960 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1a970 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1a980 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1a9b0 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1a9c0 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1a9d0 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1a9e0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1a9f0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1aa00 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1aa10 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1aa20 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1aa30 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1aa40 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1aa50 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1aa60 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1aa70 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1aa80 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1aa90 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ers */.#if SELEC
1aaa0 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1aab0 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31   char zSelName[1
1aac0 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f  2];     /* Symbo
1aad0 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73  lic name of this
1aae0 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20   SELECT use for 
1aaf0 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e  debugging */.#en
1ab00 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70  dif.  int addrOp
1ab10 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
1ab20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
1ab30 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
1ab40 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
1ab50 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
1ab60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
1ab70 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1ab80 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1ab90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1aba0 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
1abb0 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
1abc0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
1abd0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
1abe0 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
1abf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1ac00 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
1ac10 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1ac20 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
1ac30 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ac40 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
1ac50 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
1ac60 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
1ac70 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
1ac80 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
1ac90 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
1aca0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1acb0 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
1acc0 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
1acd0 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
1ace0 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
1acf0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
1ad00 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1ad10 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
1ad20 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
1ad30 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
1ad40 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1ad50 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1ad60 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1ad70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1ad80 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1ad90 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1ada0 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d  t. Or NULL. */.}
1adb0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1adc0 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
1add0 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
1ade0 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
1adf0 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
1ae00 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64  ect Flag"..*/.#d
1ae10 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
1ae20 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20  t       0x00001 
1ae30 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
1ae40 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
1ae50 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
1ae60 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
1ae70 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
1ae80 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
1ae90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1aea0 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30  solved       0x0
1aeb0 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
1aec0 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
1aed0 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
1aee0 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
1aef0 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a       0x00008  /*
1af00 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1af10 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1af20 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1af30 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1af40 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  10  /* Uses the 
1af50 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1af60 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1af70 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1af80 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 73 71    0x00020  /* sq
1af90 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1afa0 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1afb0 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1afc0 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1afd0 30 78 30 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d  0x00040  /* FROM
1afe0 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1aff0 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1b000 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1b010 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1b020 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0080  /* Part of
1b030 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1b040 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1b050 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1b060 78 30 30 31 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00100  /* Synth
1b070 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1b080 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1b090 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1b0a0 75 65 20 20 20 20 20 30 78 30 30 32 30 30 20 20  ue     0x00200  
1b0b0 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1b0c0 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1b0d0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1b0e0 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1b0f0 6d 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f  m     0x00400  /
1b100 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1b110 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1b120 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1b130 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1b140 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 4e     0x00800  /* N
1b150 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1b160 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1b170 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1b180 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1b190 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1b1a0 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1b1b0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1b1c0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1b1d0 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1b1e0 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1b1f0 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1b200 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1b210 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1b220 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1b230 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1b240 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1b250 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1b260 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1b270 65 72 74 65 64 20 20 20 20 20 20 30 78 30 38 30  erted      0x080
1b280 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1b290 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1b2a0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1b2b0 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1b2c0 65 48 69 64 64 65 6e 20 20 30 78 31 30 30 30 30  eHidden  0x10000
1b2d0 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1b2e0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1b2f0 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  utput */.../*.**
1b300 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1b310 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1b320 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1b330 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1b340 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1b350 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1b360 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1b370 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1b380 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1b390 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1b3a0 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1b3b0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1b3c0 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1b3d0 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1b3e0 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1b3f0 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1b400 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1b410 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1b420 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1b430 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1b440 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1b450 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1b460 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1b470 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1b480 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1b490 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1b4a0 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1b4b0 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1b4e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1b4f0 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1b500 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1b510 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1b520 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1b550 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1b560 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1b570 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1b580 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1b590 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1b5a0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1b5b0 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1b5c0 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1b5d0 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1b5e0 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1b5f0 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1b600 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1b610 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1b620 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1b630 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1b640 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1b650 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1b660 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1b690 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1b6a0 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1b6b0 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1b6c0 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1b6d0 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1b6e0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1b6f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1b700 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1b710 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1b720 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1b730 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1b750 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1b760 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1b770 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1b780 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b790 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1b7a0 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1b7b0 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1b7c0 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1b7d0 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1b7e0 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1b7f0 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1b800 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1b810 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1b820 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1b830 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1b840 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1b850 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b870 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1b880 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1b890 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1b8a0 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1b8b0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1b8c0 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1b8d0 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1b8e0 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1b8f0 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1b900 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1b910 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1b920 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1b930 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b950 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1b960 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1b970 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1b9a0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1b9b0 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1b9c0 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1b9d0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1b9e0 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1b9f0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1ba00 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1ba30 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1ba40 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1ba50 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1ba60 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1ba70 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1baa0 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1bab0 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1bac0 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1bae0 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1baf0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1bb00 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1bb10 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1bb30 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1bb40 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1bb50 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1bb60 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1bb70 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1bb80 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1bb90 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1bba0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1bbb0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1bbc0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1bbd0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1bbe0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1bbf0 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1bc00 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1bc10 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1bc20 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bc40 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1bc50 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1bc60 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc80 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1bc90 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1bca0 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1bcb0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1bcc0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1bcd0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1bce0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1bcf0 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1bd00 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1bd10 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1bd20 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1bd50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1bd60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1bd70 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1bd80 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1bd90 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1bda0 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1bdb0 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1bdc0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1bdd0 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1bde0 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1bdf0 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1be00 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1be10 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1be20 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1be30 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1be40 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1be50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1be60 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1be70 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1be80 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1be90 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1bea0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1beb0 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1bec0 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1bed0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1bee0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1bef0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1bf00 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1bf10 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1bf30 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1bf40 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1bf50 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1bf60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1bf70 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1bf80 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1bf90 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1bfa0 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1bfb0 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1bfc0 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1bfd0 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1bfe0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1bff0 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1c000 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1c010 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1c020 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1c030 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1c040 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1c050 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1c060 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1c070 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1c080 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1c090 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1c0a0 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1c0b0 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1c0c0 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1c0d0 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1c0e0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1c0f0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1c100 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1c110 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1c120 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1c130 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1c140 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1c150 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1c160 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1c170 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1c180 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1c190 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1c1a0 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1c1b0 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1c1c0 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1c1d0 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1c1e0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1c1f0 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1c200 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1c210 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1c220 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1c230 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1c240 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1c250 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1c260 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1c270 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1c280 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1c290 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1c2a0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1c2b0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1c2c0 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1c2d0 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1c2e0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1c2f0 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1c300 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1c310 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1c320 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1c330 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1c340 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1c350 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1c360 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1c370 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1c380 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1c390 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1c3a0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1c3b0 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1c3c0 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1c3d0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1c3e0 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1c3f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1c400 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1c410 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1c420 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1c430 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1c440 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1c450 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1c460 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1c470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1c480 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1c490 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1c4a0 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1c4b0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
1c4c0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66  t;        /* Aff
1c4d0 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1c4e0 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1c4f0 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1c500 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1c510 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1c520 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1c530 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1c540 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1c550 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1c560 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1c570 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1c580 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1c590 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c5a0 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1c5b0 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45  allocated */.  E
1c5c0 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1c5d0 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1c5e0 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1c5f0 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1c600 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1c610 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1c620 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1c630 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1c640 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1c650 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1c660 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1c670 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1c680 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1c690 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1c6a0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1c6b0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1c6c0 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1c6d0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1c6e0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1c6f0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1c700 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1c710 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1c720 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1c730 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1c740 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1c750 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1c760 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1c770 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1c780 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1c790 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1c7a0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1c7b0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1c7c0 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1c7d0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1c7e0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1c7f0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1c800 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1c810 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1c820 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1c830 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1c840 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1c850 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1c860 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1c870 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1c880 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1c890 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c8b0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1c8c0 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1c8d0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1c8e0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1c8f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1c900 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1c910 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1c920 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1c930 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1c940 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1c950 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1c960 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1c970 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1c980 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1c990 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1c9a0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1c9b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1c9c0 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1c9d0 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1c9e0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1c9f0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1ca00 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1ca10 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1ca20 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1ca30 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1ca40 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1ca50 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1ca60 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1ca70 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ca80 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1ca90 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1caa0 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1cab0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1cac0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1cad0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1cae0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1caf0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1cb00 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1cb10 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1cb20 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1cb30 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1cb40 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1cb50 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1cb60 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1cb70 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1cb80 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1cb90 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1cba0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1cbb0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1cbc0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1cbd0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1cbe0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1cbf0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1cc00 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1cc10 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1cc20 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1cc30 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1cc40 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1cc50 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1cc60 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1cc70 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1cc80 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
1cc90 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1cca0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1ccb0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1ccc0 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1ccd0 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1cce0 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1ccf0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1cd00 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1cd10 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1cd20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1cd30 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1cd40 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1cd50 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1cd60 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1cd70 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1cd80 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1cd90 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1cda0 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1cdb0 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1cdc0 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1cdd0 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1cde0 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1cdf0 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1ce00 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1ce10 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1ce20 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1ce30 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1ce40 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1ce50 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1ce60 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1ce70 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1ce80 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1ce90 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1cea0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1ceb0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1cec0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1ced0 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1cee0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1cef0 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1cf00 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1cf10 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1cf20 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1cf30 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1cf40 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1cf50 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1cf60 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1cf70 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1cf80 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1cf90 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1cfa0 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1cfb0 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1cfc0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1cfd0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1cfe0 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1cff0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1d000 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1d010 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1d020 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1d030 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1d040 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1d050 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1d060 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1d070 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1d080 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1d090 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1d0a0 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1d0b0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1d0c0 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1d0d0 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1d0e0 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1d0f0 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1d100 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1d110 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1d120 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1d130 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1d140 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1d150 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1d160 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1d170 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1d180 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1d190 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1d1a0 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1d1b0 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1d1c0 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1d1d0 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1d1e0 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1d1f0 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1d200 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1d210 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1d220 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1d230 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1d240 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1d250 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1d260 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1d270 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1d280 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1d290 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1d2a0 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1d2b0 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1d2c0 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1d2d0 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1d2e0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1d2f0 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1d300 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1d310 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1d320 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1d330 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
1d340 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1d350 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1d360 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1d370 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1d380 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1d390 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1d3a0 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1d3b0 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1d3c0 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1d3d0 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1d3e0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1d3f0 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1d400 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1d410 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1d420 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1d430 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1d440 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1d450 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1d460 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1d470 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1d480 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1d490 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1d4a0 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1d4b0 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1d4c0 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1d4d0 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d4f0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1d500 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1d510 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1d520 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1d530 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1d540 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1d550 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1d560 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1d570 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1d580 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1d590 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1d5a0 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1d5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d5c0 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1d5d0 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1d5e0 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1d5f0 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1d600 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1d610 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1d620 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1d630 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1d640 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1d650 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1d660 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1d670 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1d680 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1d690 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1d6a0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1d6b0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1d6c0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1d6d0 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1d6e0 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1d6f0 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1d700 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1d710 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1d720 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1d730 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1d740 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1d750 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1d760 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
1d770 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
1d780 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
1d790 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
1d7a0 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 61 54  bled */.  int aT
1d7b0 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
1d7c0 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1d7d0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1d7e0 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
1d7f0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
1d800 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
1d810 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1d820 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1d830 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
1d840 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
1d850 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
1d860 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1d870 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1d880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d890 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
1d8a0 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
1d8b0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1d8c0 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
1d8d0 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
1d8e0 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
1d8f0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
1d900 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d910 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
1d920 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1d930 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
1d940 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d950 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
1d960 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1d970 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
1d980 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
1d990 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
1d9a0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1d9b0 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1d9c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1d9d0 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1d9e0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1d9f0 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63  .  int szOpAlloc
1da00 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73  ;       /* Bytes
1da10 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
1da20 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1da30 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1da40 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1da50 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1da60 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1da70 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1da80 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1da90 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1daa0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1dab0 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1dac0 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1dad0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
1dae0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
1daf0 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77  le of an index w
1db00 68 6f 73 65 20 65 78 70 72 73 20 61 72 65 20 62  hose exprs are b
1db10 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20  eing coded */.  
1db20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
1db30 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
1db40 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
1db50 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
1db60 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
1db70 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
1db80 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1db90 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
1dba0 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
1dbb0 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  u values */.  in
1dbc0 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
1dbd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dbe0 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
1dbf0 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
1dc00 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
1dc10 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
1dc20 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  s */.  struct yC
1dc30 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1dc40 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1dc50 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1dc60 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1dc70 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1dc80 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1dc90 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1dca0 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1dcb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1dcc0 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1dcd0 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1dce0 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1dcf0 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1dd00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1dd10 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1dd20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1dd30 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1dd40 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
1dd50 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
1dd60 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
1dd70 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
1dd80 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
1dd90 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
1dda0 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
1ddb0 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
1ddc0 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
1ddd0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
1dde0 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
1ddf0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
1de00 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ry */.  ExprList
1de10 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
1de20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
1de30 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ions */.  Token 
1de40 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f  constraintName;/
1de50 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
1de60 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74  nstraint current
1de70 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20  ly being parsed 
1de80 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
1de90 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
1dea0 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
1deb0 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
1dec0 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
1ded0 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
1dee0 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
1def0 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
1df00 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
1df10 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
1df20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
1df30 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
1df40 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
1df50 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
1df60 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
1df70 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1df80 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
1df90 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
1dfa0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
1dfb0 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
1dfc0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1dfd0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
1dfe0 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
1dff0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
1e000 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
1e010 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
1e020 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
1e030 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
1e040 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
1e050 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20  E_ENABLED.  int 
1e060 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  nSelect;        
1e070 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45   /* Number of SE
1e080 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1e090 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  seen */.  int nS
1e0a0 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f  electIndent;   /
1e0b0 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64  * How far to ind
1e0c0 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28  ent SELECTTRACE(
1e0d0 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  ) output */.#end
1e0e0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
1e0f0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
1e100 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65  CHE.  int nTable
1e110 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20  Lock;        /* 
1e120 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20  Number of locks 
1e130 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f  in aTableLock */
1e140 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54  .  TableLock *aT
1e150 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71  ableLock; /* Req
1e160 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b  uired table lock
1e170 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63  s for shared-cac
1e180 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  he mode */.#endi
1e190 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  f.  AutoincInfo 
1e1a0 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
1e1b0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
1e1c0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
1e1d0 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e  ters */..  /* In
1e1e0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77  formation used w
1e1f0 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67  hile coding trig
1e200 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f  ger programs. */
1e210 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
1e220 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
1e230 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
1e240 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
1e250 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
1e260 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
1e270 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
1e280 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1e290 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
1e2a0 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
1e2b0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
1e2c0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1e2d0 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
1e2e0 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  BLE */.  u32 nQu
1e2f0 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1e300 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1e310 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1e320 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1e330 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1e340 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1e350 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1e360 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1e370 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1e380 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1e390 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e3a0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1e3b0 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1e3c0 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1e3d0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1e3e0 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1e3f0 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1e400 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1e410 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1e420 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1e430 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1e440 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1e450 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1e460 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1e470 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1e480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e4b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1e4c0 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1e4d0 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1e4e0 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1e4f0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1e500 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1e510 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1e520 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1e530 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1e540 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1e550 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1e560 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1e570 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1e580 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1e590 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1e5a0 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1e5b0 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1e5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e5d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e5e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e600 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e 56 61 72  ******/..  ynVar
1e610 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
1e620 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e630 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1e640 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1e650 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1e660 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1e670 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e680 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1e690 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1e6a0 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1e6b0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1e6c0 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1e6d0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1e6e0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
1e6f0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1e700 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1e710 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1e720 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1e730 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1e740 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1e750 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1e760 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1e770 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1e780 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1e790 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1e7a0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1e7b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1e7c0 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1e7d0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1e7e0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1e7f0 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1e800 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e810 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1e820 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1e830 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e850 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1e860 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1e870 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1e880 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e890 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1e8a0 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1e8b0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1e8c0 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1e8d0 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1e8e0 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1e8f0 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1e900 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1e910 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1e920 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1e930 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1e940 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1e950 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1e960 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1e970 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1e980 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1e990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1e9a0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1e9b0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1e9c0 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1e9d0 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1e9e0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1e9f0 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1ea00 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1ea10 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1ea20 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1ea30 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1ea40 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1ea50 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1ea60 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1ea70 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1ea80 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1ea90 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1eaa0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1eab0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1eac0 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1ead0 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1eae0 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1eaf0 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1eb00 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1eb10 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1eb20 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1eb30 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1eb40 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1eb50 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1eb60 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1eb70 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1eb80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1eb90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1eba0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ebc0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1ebd0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1ebe0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1ebf0 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1ec00 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1ec10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1ec20 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1ec30 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1ec40 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1ec50 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1ec60 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1ec70 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1ec80 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1ec90 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1eca0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1ecb0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1ecc0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1ecd0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1ece0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1ecf0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1ed00 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
1ed10 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
1ed20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
1ed30 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
1ed40 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1ed50 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  parse */.};../*.
1ed60 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1ed70 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1ed80 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1ed90 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1eda0 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1edb0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1edc0 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1edd0 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1ede0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1edf0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1ee00 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1ee10 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1ee20 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1ee30 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1ee40 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1ee50 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1ee60 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1ee70 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1ee80 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1ee90 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1eea0 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1eeb0 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1eec0 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1eed0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1eee0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1eef0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1ef00 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1ef10 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1ef20 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1ef30 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1ef40 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1ef50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1ef60 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1ef70 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1ef80 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64  s opcodes..*/.#d
1ef90 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1efa0 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1efb0 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a     /* OP_Insert:
1efc0 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1efd0 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20  b->nChange */.  
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20     /* Also used 
1f010 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f  in P2 (not P5) o
1f020 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23  f OP_Delete */.#
1f030 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
1f040 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
1f050 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1f060 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
1f070 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
1f080 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1f090 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1f0a0 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1f0b0 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1f0c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1f0d0 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1f0e0 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1f0f0 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1f100 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1f110 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1f120 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1f130 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1f140 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1f150 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1f160 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1f170 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1f180 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1f190 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1f1a0 72 74 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  rt() */.#ifdef S
1f1b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
1f1c0 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 64 65 66  UPDATE_HOOK.#def
1f1d0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
1f1e0 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
1f1f0 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
1f200 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
1f210 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 65 6e 64 69  ok only */.#endi
1f220 66 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  f.#define OPFLAG
1f230 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1f240 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1f250 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1f260 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1f270 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1f280 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1f290 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1f2a0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1f2b0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1f2c0 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1f2d0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1f2e0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1f2f0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1f300 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1f310 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1f320 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1f330 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1f340 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1f350 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1f360 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
1f370 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
1f380 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65  _Open should use
1f390 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
1f3a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1f3b0 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
1f3c0 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74   0x10    /* P2 t
1f3d0 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
1f3e0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
1f3f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1f400 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
1f410 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1f420 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
1f430 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23  permutation */.#
1f440 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41  define OPFLAG_SA
1f450 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32  VEPOSITION  0x02
1f460 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
1f470 3a 20 6b 65 65 70 20 63 75 72 73 6f 72 20 70 6f  : keep cursor po
1f480 73 69 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  sition */.#defin
1f490 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
1f4a0 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
1f4b0 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
1f4c0 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
1f4d0 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  p */../*. * Each
1f4e0 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
1f4f0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1f500 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
1f510 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
1f520 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
1f530 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
1f540 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
1f550 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1f560 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
1f570 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
1f580 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
1f590 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
1f5a0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
1f5b0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
1f5c0 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
1f5d0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
1f5e0 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
1f5f0 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
1f600 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
1f610 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
1f620 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
1f630 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
1f640 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
1f650 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
1f660 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
1f670 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
1f680 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
1f690 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
1f6a0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
1f6b0 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
1f6c0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
1f6d0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
1f6e0 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
1f6f0 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
1f700 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
1f710 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
1f720 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
1f730 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1f740 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
1f750 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
1f760 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
1f770 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
1f780 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
1f790 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
1f7a0 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
1f7b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1f7c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
1f7d0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
1f800 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
1f810 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
1f820 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
1f830 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
1f840 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
1f850 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1f860 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1f870 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1f880 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
1f890 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
1f8a0 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
1f8b0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
1f8c0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
1f8d0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
1f8e0 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
1f8f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1f900 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
1f910 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
1f920 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
1f930 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
1f940 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
1f950 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
1f960 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
1f970 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
1f9a0 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
1f9b0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
1f9c0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
1f9d0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1f9e0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
1f9f0 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
1fa00 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
1fa10 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1fa20 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1fa30 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
1fa40 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
1fa50 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
1fa60 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
1fa70 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
1fa80 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1fa90 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1faa0 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
1fab0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1fac0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
1fad0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
1fae0 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
1faf0 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
1fb00 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
1fb10 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
1fb20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
1fb30 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
1fb40 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
1fb50 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
1fb60 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
1fb70 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
1fb80 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
1fb90 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
1fba0 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
1fbb0 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
1fbc0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
1fbd0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
1fbe0 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
1fbf0 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
1fc00 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
1fc10 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
1fc20 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1fc30 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
1fc40 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
1fc50 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
1fc60 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
1fc70 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
1fc80 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1fc90 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
1fca0 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
1fcb0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
1fcc0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
1fcd0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
1fce0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
1fcf0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1fd00 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
1fd10 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1fd20 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1fd30 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1fd40 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1fd50 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1fd60 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1fd70 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1fd80 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
1fd90 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
1fda0 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
1fdb0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
1fdc0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
1fdd0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
1fde0 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
1fdf0 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
1fe00 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
1fe10 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
1fe20 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
1fe30 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
1fe40 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
1fe50 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
1fe60 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
1fe70 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
1fe80 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
1fe90 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
1fea0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1feb0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
1fec0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1fed0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1fee0 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
1fef0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
1ff00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
1ff10 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1ff20 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1ff30 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1ff40 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1ff50 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1ff60 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1ff70 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1ff80 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1ff90 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1ffa0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1ffb0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1ffc0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1ffd0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1ffe0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1fff0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
20000 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
20010 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
20020 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
20030 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
20040 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
20050 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
20060 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
20070 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
20080 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
20090 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
200a0 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
200b0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
200c0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
200d0 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
200e0 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
200f0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
20100 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
20110 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
20120 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
20130 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
20140 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
20150 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
20160 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
20170 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
20180 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
20190 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
201a0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
201b0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
201c0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
201d0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
201e0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
201f0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
20200 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
20210 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
20220 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
20230 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
20240 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
20250 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
20270 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
20280 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
20290 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
202a0 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
202b0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
202c0 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
202d0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
202e0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
202f0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
20300 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
20310 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
20320 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
20330 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
20340 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
20350 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
20360 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
20370 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
20380 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
20390 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
203a0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
203b0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
203c0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
203d0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
203e0 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
203f0 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
20400 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
20410 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
20420 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
20430 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
20440 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
20450 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
20460 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
20470 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
20480 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
20490 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
204a0 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
204b0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
204c0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
204d0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
204e0 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
204f0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
20500 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
20510 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
20520 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
20530 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
20540 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
20550 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
20560 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
20570 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
20580 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
20590 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
205a0 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
205b0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
205c0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
205d0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
205e0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
205f0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
20600 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
20610 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
20620 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
20630 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
20640 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
20650 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
20660 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
20670 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
20680 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
20690 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
206a0 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
206b0 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
206c0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
206d0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
206e0 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
206f0 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
20700 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
20710 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
20720 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
20730 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
20740 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
20750 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
20760 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
20770 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
20780 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
20790 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
207a0 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
207b0 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
207c0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
207d0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
207e0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
207f0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
20800 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
20810 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
20820 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
20830 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
20840 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
20850 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
20860 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
20870 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
20880 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
20890 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
208a0 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
208b0 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
208c0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
208d0 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
208e0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
208f0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
20900 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
20910 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
20920 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
20930 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
20940 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
20950 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
20960 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
20970 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
20980 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
20990 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
209a0 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
209b0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
209c0 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
209d0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
209e0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
209f0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
20a00 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
20a10 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  e */.  u8   accE
20a20 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
20a30 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
20a40 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
20a50 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74   */.  u8   print
20a60 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51  fFlags;    /* SQ
20a70 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67  LITE_PRINTF flag
20a80 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64  s below */.};.#d
20a90 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
20aa0 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
20ab0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
20ac0 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    2.#define SQLI
20ad0 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
20ae0 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
20af0 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
20b00 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
20b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
20b20 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
20b30 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
20b40 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
20b50 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
20b60 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
20b70 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
20b80 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
20b90 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
20ba0 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
20bb0 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
20bc0 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
20bd0 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
20be0 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
20bf0 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
20c00 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
20c10 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
20c20 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
20c30 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
20c40 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
20c50 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
20c60 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
20c70 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
20c80 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
20c90 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
20ca0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
20cb0 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
20cc0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
20cd0 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
20ce0 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
20cf0 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
20d00 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
20d10 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
20d20 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
20d30 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
20d40 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
20d50 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20d70 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
20d80 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
20d90 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
20da0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
20db0 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
20dc0 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
20dd0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
20de0 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
20df0 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
20e00 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
20e10 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
20e20 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
20e30 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
20e40 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20e60 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
20e70 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
20e80 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
20e90 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
20ea0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
20eb0 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
20ec0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
20ed0 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20ef0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
20f00 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
20f10 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f30 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
20f40 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
20f50 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
20f60 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f80 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
20f90 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
20fa0 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
20fb0 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20fd0 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
20fe0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
20ff0 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21010 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
21020 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
21030 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
21040 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
21050 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
21060 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
21070 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
21080 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
210b0 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
210c0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
210d0 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
210e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
210f0 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
21100 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
21110 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
21120 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
21130 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
21140 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
21150 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
21160 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
21170 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
21180 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
21190 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
211a0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
211b0 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
211c0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
211d0 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
211e0 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
211f0 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
21220 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
21230 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
21260 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
21270 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
21280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
21290 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
212a0 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
212b0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
212c0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
212d0 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
212e0 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
212f0 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
21300 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
21310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21320 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
21330 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
21340 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21360 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
21370 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
21380 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
21390 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
213a0 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
213b0 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
213c0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
213e0 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
213f0 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
21400 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
21430 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
21440 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21460 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
21470 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
21480 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
214b0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
214c0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
214d0 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
214e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
214f0 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
21500 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
21510 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
21520 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
21530 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
21540 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
21550 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
21560 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21580 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
21590 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
215a0 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
215b0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
215c0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
215d0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
215e0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
215f0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
21600 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
21610 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
21640 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
21650 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
21660 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
21670 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
21680 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
21690 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
216a0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
216b0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
216c0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
216d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
216e0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
216f0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
21700 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
21710 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
21720 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
21730 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
21740 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
21750 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21770 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
21780 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
21790 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
217a0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
217b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
217c0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
217d0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
217e0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
217f0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
21800 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
21810 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
21820 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
21830 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
21840 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
21850 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
21860 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
21870 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
218a0 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
218b0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
218c0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
218d0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
218e0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
218f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
21900 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
21910 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
21920 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
21930 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
21940 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
21950 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
21960 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
21970 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
21980 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
21990 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
219a0 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
219b0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
219c0 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
219d0 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
219e0 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
219f0 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
21a00 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
21a10 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
21a20 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
21a30 3b 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 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
21a60 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
21a70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21a80 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
21a90 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
21aa0 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
21ab0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
21ac0 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
21ad0 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
21ae0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
21af0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
21b00 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
21b10 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
21b20 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
21b30 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
21b40 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
21b50 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
21b60 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
21b70 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
21b80 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
21b90 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
21ba0 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
21bb0 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
21bc0 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
21bd0 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
21be0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
21bf0 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
21c00 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
21c10 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
21c20 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
21c30 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
21c40 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
21c50 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
21c60 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
21c70 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
21c80 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
21c90 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
21ca0 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
21cb0 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
21cc0 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
21cd0 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
21ce0 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
21cf0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
21d00 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
21d10 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
21d20 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
21d30 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
21d40 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
21d50 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
21d60 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
21d70 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
21d80 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
21d90 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
21da0 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
21db0 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
21dc0 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
21dd0 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
21de0 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20  alker {.  Parse 
21df0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
21e20 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
21e30 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b   (*xExprCallback
21e40 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  )(Walker*, Expr*
21e50 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61  );     /* Callba
21e60 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f  ck for expressio
21e70 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53  ns */.  int (*xS
21e80 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57  electCallback)(W
21e90 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
21ea0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
21eb0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76  r SELECTs */.  v
21ec0 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  oid (*xSelectCal
21ed0 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c  lback2)(Walker*,
21ee0 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f  Select*);/* Seco
21ef0 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  nd callback for 
21f00 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74  SELECTs */.  int
21f10 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21f40 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
21f50 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21f80 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
21f90 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
21fa0 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fc0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
21fd0 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
21fe0 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
21ff0 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22010 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
22020 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
22030 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22050 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
22060 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
22070 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22090 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
220a0 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
220b0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
220c0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
220e0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
220f0 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
22100 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22120 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
22130 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
22140 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
22150 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22170 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
22180 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
22190 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
221a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
221c0 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
221d0 6e 64 65 78 65 73 20 2a 2f 0a 20 20 7d 20 75 3b  ndexes */.  } u;
221e0 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
221f0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
22200 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
22210 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
22220 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
22230 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
22240 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
22250 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
22260 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
22270 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
22280 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
22290 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
222a0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
222b0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
222c0 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
222d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
222e0 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
222f0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f  ker*, Expr*);../
22300 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
22310 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
22320 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
22330 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
22340 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
22350 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
22360 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
22370 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
22380 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
22390 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
223a0 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
223b0 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
223c0 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
223d0 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
223e0 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
223f0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
22400 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
22410 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  alk */../*.** An
22420 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
22430 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70 72  s structure repr
22440 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
22450 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73  one or more CTEs
22460 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c  .** (common tabl
22470 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63  e expressions) c
22480 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e 67  reated by a sing
22490 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a  le WITH clause..
224a0 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b  */.struct With {
224b0 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20  .  int nCte;    
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
224e0 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54 48  CTEs in the WITH
224f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74   clause */.  Wit
22500 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20  h *pOuter;      
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22520 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20  Containing WITH 
22530 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
22540 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65 20  */.  struct Cte 
22550 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
22560 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68       /* For each
22570 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54 48   CTE in the WITH
22580 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20   clause.... */. 
22590 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
225c0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78  is CTE */.    Ex
225d0 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20  prList *pCols;  
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
225f0 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69   List of explici
22600 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  t column names, 
22610 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53  or NULL */.    S
22620 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22640 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  * The definition
22650 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
22660 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
22670 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20 20  zCteErr;        
22680 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
22690 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61  sage for circula
226a0 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  r references */.
226b0 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69    } a[1];.};..#i
226c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
226d0 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  G./*.** An insta
226e0 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65 56  nce of the TreeV
226f0 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73  iew object is us
22700 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20  ed for printing 
22710 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
22720 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  * data structure
22730 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75  s on sqlite3Debu
22740 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20  gPrintf() using 
22750 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77  a tree-like view
22760 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65  ..*/.struct Tree
22770 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65  View {.  int iLe
22780 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
22790 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20   /* Which level 
227a0 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20 61  of the tree we a
227b0 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62  re on */.  u8  b
227c0 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20  Line[100];      
227d0 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69     /* Draw verti
227e0 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20  cal in column i 
227f0 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74  if bLine[i] is t
22800 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66  rue */.};.#endif
22810 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
22820 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d   */../*.** Assum
22830 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
22840 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
22850 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
22860 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
22870 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
22880 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
22890 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
228a0 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
228b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
228c0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
228f0 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
22900 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
22930 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
22940 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
22950 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22990 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
229a0 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
229b0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
229c0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
229d0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
229e0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
229f0 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
22a00 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
22a10 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
22a20 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
22a30 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
22a40 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
22a50 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
22a60 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
22a70 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
22a80 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
22a90 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
22aa0 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
22ab0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
22ac0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
22ad0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
22ae0 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29  orruptError(int)
22af0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73  ;.int sqlite3Mis
22b00 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  useError(int);.i
22b10 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  nt sqlite3Cantop
22b20 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64  enError(int);.#d
22b30 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
22b40 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65  RUPT_BKPT sqlite
22b50 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
22b60 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
22b70 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
22b80 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  PT sqlite3Misuse
22b90 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
22ba0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
22bb0 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c  ANTOPEN_BKPT sql
22bc0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
22bd0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64  r(__LINE__).#ifd
22be0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
22bf0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d    int sqlite3Nom
22c00 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20  emError(int);.  
22c10 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72  int sqlite3Ioerr
22c20 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  nomemError(int);
22c30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22c40 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
22c50 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  te3NomemError(__
22c60 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
22c70 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
22c80 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
22c90 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
22ca0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a  __LINE__).#else.
22cb0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
22cc0 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
22cd0 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
22ce0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
22cf0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
22d00 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64  IOERR_NOMEM.#end
22d10 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61  if../*.** FTS3 a
22d20 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65 71  nd FTS4 both req
22d30 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62  uire virtual tab
22d40 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69  le support.*/.#i
22d50 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22d60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
22d70 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  LE).# undef SQLI
22d80 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
22d90 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
22da0 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66  ABLE_FTS4.#endif
22db0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
22dc0 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
22dd0 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
22de0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
22df0 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
22e00 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
22e10 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
22e20 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
22e30 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  lso call.** the 
22e40 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
22e50 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
22e60 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e as an alias fo
22e70 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
22e80 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
22e90 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
22ea0 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
22eb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
22ec0 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
22ed0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
22ee0 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  FTS3 1.#endif../
22ef0 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
22f00 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
22f10 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
22f20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
22f30 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
22f40 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
22f50 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
22f60 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
22f70 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
22f80 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
22f90 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
22fa0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
22fb0 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
22fc0 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
22fd0 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
22fe0 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
22ff0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
23000 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
23010 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
23020 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
23030 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
23040 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
23050 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
23060 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
23070 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
23080 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
23090 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
230a0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
230b0 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
230c0 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
230d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
230e0 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
230f0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
23100 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
23110 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
23120 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
23130 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23140 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
23150 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23160 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23170 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
23180 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
23190 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
231a0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
231b0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
231c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
231d0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
231e0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
231f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23200 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
23210 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
23220 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
23230 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
23240 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
23250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23260 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
23270 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23280 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23290 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
232a0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
232b0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
232c0 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
232d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
232e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
232f0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
23300 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
23310 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
23320 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
23330 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
23340 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
23350 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
23360 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
23370 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
23380 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
23390 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
233a0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
233b0 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
233c0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
233d0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
233e0 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
233f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23400 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
23410 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
23420 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
23430 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
23440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
23450 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
23460 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
23470 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23 69 66  )(x)).#endif.#if
23480 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23490 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
234a0 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  IAGS.int sqlite3
234b0 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65  IsIdChar(u8);.#e
234c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
234d0 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
234e0 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20  ototypes.*/.int 
234f0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63  sqlite3StrICmp(c
23500 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
23510 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
23520 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
23530 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
23540 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
23550 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
23560 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
23570 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
23580 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
23590 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
235a0 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
235b0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
235c0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
235d0 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
235e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
235f0 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
23600 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
23610 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
23620 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
23630 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
23640 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
23650 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
23660 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
23670 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
23680 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
23690 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
236a0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
236b0 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
236c0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
236d0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  char*, u64);.voi
236e0 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
236f0 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76  c(void*, u64);.v
23700 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
23710 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
23720 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
23730 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
23740 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
23750 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75  te3 *, void *, u
23760 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  64);.void sqlite
23770 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
23780 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
23790 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
237a0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
237b0 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
237c0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
237d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53  ;.void *sqlite3S
237e0 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74  cratchMalloc(int
237f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23800 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a  cratchFree(void*
23810 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23820 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
23830 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
23840 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
23850 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
23860 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
23870 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23880 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
23890 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
238a0 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
238b0 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
238c0 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23  id (*)(void));.#
238d0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
238e0 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
238f0 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
23900 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
23910 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
23920 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
23930 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
23940 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
23950 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
23960 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
23970 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
23980 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
23990 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
239a0 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
239b0 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
239c0 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
239d0 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
239e0 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
239f0 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
23a00 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
23a10 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
23a20 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
23a30 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
23a40 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
23a50 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
23a60 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
23a70 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
23a80 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
23a90 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
23aa0 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
23ab0 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
23ac0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23ad0 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a  3StackFree(D,P).
23ae0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
23af0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
23b00 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
23b10 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
23b20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
23b30 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
23b40 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
23b50 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
23b60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23b70 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
23b80 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
23b90 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
23ba0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
23bb0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
23bc0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
23bd0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
23be0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
23bf0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
23c00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
23c10 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
23c20 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
23c30 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
23c40 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
23c50 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
23c60 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
23c70 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
23c80 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
23c90 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
23ca0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
23cb0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
23cc0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
23cd0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
23ce0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
23cf0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
23d00 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
23d10 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
23d20 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
23d30 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
23d40 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
23d50 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23d60 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26  TE_MUTEX_OMIT) &
23d70 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
23d80 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20  E_MUTEX_NOOP).  
23d90 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f  void sqlite3Memo
23da0 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b  ryBarrier(void);
23db0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23dc0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
23dd0 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73  rier().#endif..s
23de0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
23df0 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
23e00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23e10 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
23e20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23e30 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
23e40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23e50 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61  ite3StatusHighwa
23e60 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  ter(int, int);..
23e70 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
23e80 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
23e90 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
23ea0 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
23eb0 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
23ec0 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
23ed0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
23ee0 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
23ef0 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  d);..#ifndef SQL
23f00 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
23f10 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
23f20 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
23f30 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
23f40 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
23f50 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
23f60 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
23f70 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
23f80 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
23f90 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
23fa0 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
23fb0 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
23fc0 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
23fd0 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
23fe0 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
23ff0 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
24000 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
24010 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
24020 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
24030 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
24040 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
24050 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
24060 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
24070 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
24080 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
24090 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
240a0 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
240b0 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
240c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
240d0 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
240e0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
240f0 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c  _list);.void sql
24100 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
24110 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
24120 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
24130 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
24140 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
24150 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
24160 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
24170 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
24180 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
24190 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
241a0 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
241b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
241c0 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
241d0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
241e0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
241f0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
24200 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
24210 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
24220 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
24230 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
24240 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
24250 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
24260 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
24270 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
24280 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
24290 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
242a0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
242b0 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
242c0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
242d0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
242e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
242f0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
24300 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
24310 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
24320 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
24330 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
24340 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  h(TreeView*, con
24350 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  st With*, u8);.#
24360 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
24370 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
24380 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
24390 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
243a0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
243b0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
243c0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
243d0 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  nt sqlite3Dequot
243e0 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
243f0 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28  qlite3TokenInit(
24400 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69  Token*,char*);.i
24410 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
24420 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
24430 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
24440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
24450 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
24460 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
24470 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
24480 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
24490 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
244a0 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
244b0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
244c0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
244d0 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
244e0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
244f0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
24500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24510 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
24520 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
24530 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
24540 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
24550 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
24560 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
24570 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
24580 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  nRange(Parse*,in
24590 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45  t,int);.#endif.E
245a0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
245b0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
245c0 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
245d0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
245e0 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
245f0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
24600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
24610 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
24620 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
24630 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
24640 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
24650 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
24660 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
24670 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  st Token*);.void
24680 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
24690 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
246a0 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
246b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
246c0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
246d0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
246e0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
246f0 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
24700 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
24710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24720 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
24730 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
24740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24750 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
24760 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
24770 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
24780 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
24790 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
247a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
247b0 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
247c0 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
247d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
247e0 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
247f0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
24800 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
24810 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
24820 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
24830 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
24840 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
24850 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
24860 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
24870 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
24880 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
24890 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
248a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
248b0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
248c0 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
248d0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
248e0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
248f0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
24900 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
24910 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
24920 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
24930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
24940 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
24950 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
24960 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24970 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
24980 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
24990 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
249a0 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
249b0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
249c0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
249d0 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
249e0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
249f0 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
24a00 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
24a10 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
24a20 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
24a30 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
24a40 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
24a50 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
24a60 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
24a70 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
24a80 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
24a90 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  *,Select*);.Tabl
24aa0 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
24ab0 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
24ac0 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
24ad0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
24ae0 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
24af0 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
24b00 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
24b10 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
24b20 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
24b30 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
24b40 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
24b50 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
24b60 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
24b70 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
24b80 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
24b90 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
24ba0 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
24bb0 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
24bc0 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
24bd0 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
24be0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24bf0 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
24c00 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
24c10 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
24c20 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
24c30 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
24c40 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
24c50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
24c60 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
24c70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24c80 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
24c90 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
24ca0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
24cb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24cc0 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
24cd0 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
24ce0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
24cf0 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
24d00 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
24d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
24d20 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
24d30 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
24d40 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
24d50 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
24d60 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
24d70 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24d80 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
24d90 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
24da0 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
24dd0 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
24de0 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
24df0 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
24e00 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
24e10 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
24e20 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
24e30 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
24e40 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
24e50 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71  TEST.# define sq
24e60 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
24e70 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
24e80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
24e90 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
24ea0 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
24eb0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
24ec0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
24ed0 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
24ee0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
24ef0 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
24f00 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
24f10 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
24f20 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
24f30 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
24f40 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
24f50 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
24f60 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
24f70 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
24f80 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
24f90 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
24fa0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
24fb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24fc0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69  T_BUILTIN_TEST.i
24fd0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
24fe0 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
24ff0 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
25000 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
25010 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
25020 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
25030 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
25040 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
25050 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
25060 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
25070 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
25080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
25090 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
250a0 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
250b0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
250c0 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
250d0 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
250e0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
250f0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
25100 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
25110 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
25120 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
25130 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
25140 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
25150 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25160 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
25170 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
25180 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
25190 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
251a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
251b0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
251c0 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
251d0 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
251e0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
251f0 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
25200 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
25210 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
25220 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
25230 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
25240 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
25250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
25260 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
25270 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
25280 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25290 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
252a0 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
252b0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
252c0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
252d0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
252e0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
252f0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
25300 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
25310 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
25320 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
25330 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
25340 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
25350 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
25360 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25370 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
25380 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
25390 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
253a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
253b0 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
253c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
253d0 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
253e0 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
253f0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
25400 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
25410 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
25420 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
25430 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
25440 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
25450 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
25460 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
25470 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
25480 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
25490 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
254a0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
254b0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
254c0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
254d0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
254e0 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
254f0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
25500 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
25510 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
25520 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
25560 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
25570 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
25580 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
25590 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
255a0 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
255b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
255c0 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
255d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
255e0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
255f0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
25600 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
25610 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
25620 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
25630 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
25640 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
25650 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
25660 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
25670 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
25680 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
25690 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
256a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
256b0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
256c0 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
256d0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
256e0 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
256f0 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
25700 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
25710 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
25720 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
25730 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
25740 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
25750 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
25760 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
25790 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
257a0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
257b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
257c0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
257d0 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
257e0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
257f0 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
25800 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
25810 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
25820 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
25830 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25850 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
25860 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
25870 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
25880 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
25890 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
258a0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
258b0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
258c0 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
258d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
258e0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
258f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
25900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
25910 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
25920 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
25930 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
25940 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25950 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
25960 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
25970 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
25980 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
25990 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
259a0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
259b0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
259c0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
259d0 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
259e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
259f0 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
25a00 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
25a10 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25a20 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
25a30 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
25a40 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
25a50 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
25a60 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
25a70 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
25a80 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
25a90 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
25aa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
25ab0 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
25ac0 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
25ad0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
25ae0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
25af0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25b00 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
25b10 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
25b20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
25b30 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
25b40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
25b50 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
25b60 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
25b70 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
25b80 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
25b90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
25ba0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
25bb0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
25bc0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
25bd0 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
25be0 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
25bf0 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
25c00 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
25c10 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
25c20 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
25c30 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
25c40 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
25c50 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
25c60 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
25c70 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
25c80 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
25c90 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
25ca0 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
25cb0 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
25cc0 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
25cd0 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
25ce0 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
25cf0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
25d00 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
25d10 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
25d20 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
25d30 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
25d40 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
25d50 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
25d60 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72  tColumnToReg(Par
25d70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
25d80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
25d90 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
25da0 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
25db0 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
25dc0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
25dd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25de0 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
25df0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
25e00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25e10 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
25e20 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
25e30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25e40 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
25e50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
25e60 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
25e70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
25e80 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
25e90 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
25ea0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25eb0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
25ec0 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
25ed0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
25ee0 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
25ef0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
25f00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25f10 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
25f20 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
25f30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
25f40 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
25f50 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
25f60 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
25f70 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
25f80 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
25f90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25fa0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
25fb0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
25fc0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
25fd0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
25fe0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
25ff0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
26000 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
26010 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
26020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26030 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
26040 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
26050 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
26060 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
26070 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
26080 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
26090 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
260a0 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
260b0 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
260c0 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
260d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
260e0 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
260f0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
26100 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
26110 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
26120 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
26130 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
26140 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
26150 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64  derByCol */.void
26160 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
26170 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
26180 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26190 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
261a0 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
261b0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
261c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
261d0 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a  fFalseDup(Parse*
261e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
261f0 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
26200 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
26210 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26220 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
26230 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
26240 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
26250 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73  ,int isView,cons
26260 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
26270 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
26280 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
26290 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20  Item(Parse*,int 
262a0 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72  isView,struct Sr
262b0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
262c0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
262d0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
262e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
262f0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
26300 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
26310 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
26320 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
26330 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
26340 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
26350 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
26360 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
26370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26380 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
26390 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
263a0 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
263b0 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
263c0 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
263d0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
263e0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
263f0 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72  ExprCompare(Expr
26400 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
26410 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
26420 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
26430 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
26440 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26450 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
26460 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  r(Expr*, Expr*, 
26470 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26480 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
26490 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
264a0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
264b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
264c0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
264d0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
264e0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
264f0 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
26500 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
26510 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
26520 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
26530 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
26540 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
26550 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69 74  _TEST.void sqlit
26560 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
26570 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
26580 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
26590 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
265a0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
265b0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
265c0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
265d0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
265e0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
265f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26600 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
26610 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
26620 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
26630 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
26640 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
26650 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
26660 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
26670 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
26680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
26690 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
266a0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
266b0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
266c0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
266d0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
266e0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
266f0 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
26700 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
26710 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
26720 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
26730 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
26740 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
26750 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
26760 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
26770 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
26780 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
26790 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
267a0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
267b0 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
267c0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
267d0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
267e0 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
267f0 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74  _HINTS.int sqlit
26800 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75  e3ExprContainsSu
26810 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23  bquery(Expr*);.#
26820 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
26830 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
26840 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
26850 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
26860 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
26870 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
26880 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
26890 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
268a0 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
268b0 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
268c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
268d0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
268e0 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20  teRowDelete(.   
268f0 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54   Parse*,Table*,T
26900 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
26910 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
26920 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26930 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
26940 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
26950 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
26960 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
26970 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
26980 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
26990 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
269a0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
269b0 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
269c0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
269d0 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
269e0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
269f0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
26a00 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
26a10 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
26a20 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
26a30 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a50 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
26a60 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76 6f  t,int*,int*);.vo
26a70 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
26a80 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
26a90 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
26aa0 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
26ab0 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
26ac0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
26ad0 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
26ae0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
26af0 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
26b00 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
26b10 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
26b20 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
26b30 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26b40 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
26b50 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
26b60 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
26b70 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
26b80 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
26b90 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
26ba0 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
26bb0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
26bc0 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
26bd0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
26be0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
26bf0 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
26c00 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
26c10 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
26c20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
26c30 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
26c40 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
26c50 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
26c60 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
26c70 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
26c80 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
26c90 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
26ca0 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
26cb0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
26cc0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
26cd0 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
26ce0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
26cf0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
26d00 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45  ct*,int);.#if SE
26d10 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
26d20 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  D.void sqlite3Se
26d30 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65  lectSetName(Sele
26d40 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ct*,const char*)
26d50 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26d60 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
26d70 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69  tName(A,B).#endi
26d80 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
26d90 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73  sertBuiltinFuncs
26da0 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a  (FuncDef*,int);.
26db0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
26dc0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
26dd0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
26de0 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  *,int,u8,u8);.vo
26df0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
26e00 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
26e10 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
26e20 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61  qlite3RegisterDa
26e30 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28  teTimeFunctions(
26e40 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
26e50 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f  te3RegisterPerCo
26e60 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46  nnectionBuiltinF
26e70 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
26e80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
26e90 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
26ea0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
26eb0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
26ec0 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
26ed0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
26ee0 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
26ef0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
26f00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
26f10 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
26f20 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26f30 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
26f40 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
26f50 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
26f60 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
26f70 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
26f80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
26f90 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
26fa0 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
26fb0 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
26fc0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
26fd0 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
26fe0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
27000 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
27010 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
27020 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
27030 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
27040 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
27050 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
27060 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
27070 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
27080 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
27090 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
270a0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
270b0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
270c0 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
270d0 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
270e0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
270f0 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
27100 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
27110 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
27120 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
27130 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
27140 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
27150 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
27160 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
27170 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27190 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
271a0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
271b0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
271c0 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
271d0 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
271e0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
271f0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
27200 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
27210 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
27220 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
27230 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
27240 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
27250 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
27260 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
27270 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
27280 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
27290 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
272a0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
272b0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
272c0 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
272d0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
272e0 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
272f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27310 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b      Select*,u8);
27320 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
27330 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
27340 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
27350 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
27360 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
27370 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
27380 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
27390 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
273a0 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
273b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
273c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
273d0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
273e0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
273f0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
27400 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
27410 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
27420 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
27430 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
27440 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
27450 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
27460 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
27470 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
27480 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
27490 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
274a0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
274b0 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73   (p)).# define s
274c0 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
274d0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
274e0 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  vel==0).#else.# 
274f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
27500 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
27510 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
27520 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
27530 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
27540 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
27550 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
27560 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27570 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
27580 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
27590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
275a0 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
275b0 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
275c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
275d0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
275e0 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
275f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27600 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
27610 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
27620 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
27630 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
27640 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
27650 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e  vel(p) 1.# defin
27660 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
27670 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
27680 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
27690 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
276a0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
276b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
276c0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
276d0 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
276e0 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
276f0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
27700 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
27710 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
27720 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
27730 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
27740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
27750 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
27760 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
27770 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
27780 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
27790 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
277a0 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
277b0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
277c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
277d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
277e0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
277f0 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
27800 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
27810 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
27820 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
27830 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
27840 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
27850 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
27860 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
27870 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
27880 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
27890 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
278a0 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
278b0 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
278c0 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
278d0 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
278e0 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
278f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
27900 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
27910 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
27920 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
27930 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
27940 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
27950 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
27960 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
27970 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
27980 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
27990 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
279a0 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
279b0 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
279c0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
279d0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
279e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
279f0 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
27a00 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
27a10 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
27a20 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
27a30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
27a40 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
27a50 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
27a60 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
27a70 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
27a80 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
27a90 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
27aa0 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
27ab0 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
27ac0 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
27ad0 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
27ae0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
27af0 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
27b00 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
27b10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
27b20 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
27b30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
27b40 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
27b50 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
27b60 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
27b70 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
27b80 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
27b90 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
27ba0 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
27bb0 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
27bc0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
27bd0 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
27be0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
27bf0 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
27c00 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
27c10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
27c20 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
27c30 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
27c40 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
27c50 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
27c60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
27c70 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c  T_SCANSTATUS) ||
27c80 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
27c90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
27ca0 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20  T3_OR_STAT4) || 
27cb0 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
27cc0 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
27cd0 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
27ce0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
27cf0 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
27d00 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  dif../*.** Routi
27d10 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
27d20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
27d30 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
27d40 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
27d50 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
27d60 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
27d70 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
27d80 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
27d90 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
27da0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
27db0 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
27dc0 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
27dd0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
27de0 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
27df0 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
27e00 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
27e10 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
27e20 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
27e30 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
27e40 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
27e50 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
27e60 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
27e70 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
27e80 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
27e90 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
27ea0 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
27eb0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
27ec0 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
27ed0 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
27ee0 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
27ef0 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
27f00 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
27f10 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
27f20 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
27f30 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
27f40 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
27f50 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
27f60 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
27f70 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
27f80 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
27f90 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
27fa0 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
27fb0 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
27fc0 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
27fd0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
27fe0 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
27ff0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
28000 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
28010 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
28020 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
28030 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
28040 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
28050 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73  dexAffinityStr(s
28060 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
28070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
28080 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65  bleAffinity(Vdbe
28090 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
280a0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
280b0 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
280c0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
280d0 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
280e0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
280f0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
28100 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
28110 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
28120 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
28130 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
28140 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
28150 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
28160 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
28170 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
28180 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
28190 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
281a0 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71  3ErrorWithMsg(sq
281b0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
281c0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
281d0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
281e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
281f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74  void sqlite3Syst
28200 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  emError(sqlite3*
28210 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
28220 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
28230 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
28240 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
28250 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
28260 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
28270 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
28280 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
28290 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
282a0 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
282b0 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
282c0 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
282d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
282e0 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
282f0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
28300 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
28310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
28320 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
28330 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
28340 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
28350 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
28360 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
28370 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
28380 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
28390 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
283a0 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
283b0 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
283c0 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
283d0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
283e0 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
283f0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
28400 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
28410 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
28420 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
28430 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
28440 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
28450 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
28460 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
28470 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
28480 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
28490 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
284a0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
284b0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
284c0 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
284d0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
284e0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
284f0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
28500 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
28510 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
28520 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
28530 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
28540 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
28550 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
28560 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
28570 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
28580 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
28590 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
285a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
285b0 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
285c0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
285d0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
285e0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
285f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28600 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
28610 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
28620 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
28630 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
28640 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
28650 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
28660 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
28670 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
28680 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
28690 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
286a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
286b0 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
286c0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
286d0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
28700 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
28710 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
28720 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
28730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
28740 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
28750 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
28760 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
28770 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
28780 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
28790 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
287a0 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
287b0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
287c0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
287d0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
287e0 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
287f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
28800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
28810 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
28820 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
28830 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
28840 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
28850 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
28860 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
28870 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
28880 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
28890 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71  rn const char sq
288a0 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d  lite3StrBINARY[]
288b0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
288c0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
288d0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
288e0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
288f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
28900 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d  qlite3CtypeMap[]
28910 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54  ;.extern const T
28920 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54  oken sqlite3IntT
28930 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20  okens[];.extern 
28940 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63  SQLITE_WSD struc
28950 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
28960 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65  sqlite3Config;.e
28970 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73  xtern FuncDefHas
28980 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e  h sqlite3Builtin
28990 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
289a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
289b0 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
289c0 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
289d0 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
289e0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
289f0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
28a00 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
28a10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28a20 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
28a30 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
28a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
28a50 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
28a60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
28a70 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
28a80 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
28a90 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
28aa0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
28ab0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
28ac0 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
28ad0 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
28ae0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
28af0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
28b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28b10 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
28b20 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
28b30 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
28b40 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
28b50 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
28b60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28b70 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
28b80 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
28b90 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
28ba0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
28bb0 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
28bc0 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
28bd0 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
28be0 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
28bf0 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
28c00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
28c10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
28c20 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
28c30 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
28c40 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
28c50 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
28c60 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
28c70 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
28c80 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
28c90 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
28ca0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
28cb0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
28cc0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
28cd0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
28ce0 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
28cf0 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
28d00 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
28d10 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
28d20 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
28d30 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
28d40 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
28d50 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
28d60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28d70 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
28d80 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
28d90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28da0 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
28db0 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
28dc0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
28dd0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
28de0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
28df0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
28e00 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
28e10 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61  te3GetCollSeq(Pa
28e20 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65  rse*, u8, CollSe
28e30 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  q *, const char*
28e40 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41  );.char sqlite3A
28e50 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73  ffinityType(cons
28e60 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76  t char*, u8*);.v
28e70 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
28e80 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ze(Parse*, Token
28e90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
28ea0 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
28eb0 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
28ec0 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dler*);.int sqli
28ed0 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
28ee0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
28ef0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
28f00 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
28f10 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
28f20 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
28f30 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
28f40 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
28f50 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
28f60 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
28f70 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
28f80 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
28f90 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
28fa0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
28fb0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
28fc0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
28fd0 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
28fe0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
28ff0 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
29000 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29010 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64  SchemaClear(void
29020 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c   *);.Schema *sql
29030 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71  ite3SchemaGet(sq
29040 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a  lite3 *, Btree *
29050 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63  );.int sqlite3Sc
29060 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69  hemaToIndex(sqli
29070 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20  te3 *db, Schema 
29080 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
29090 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63  ite3KeyInfoAlloc
290a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e  (sqlite3*,int,in
290b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
290c0 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79  KeyInfoUnref(Key
290d0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
290e0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52  *sqlite3KeyInfoR
290f0 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
29100 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
29110 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72  yInfoOfIndex(Par
29120 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  se*, Index*);.#i
29130 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
29140 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
29150 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
29160 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
29170 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
29180 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
29190 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
291a0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
291b0 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  *,.  void (*)(sq
291c0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
291d0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
291e0 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
291f0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
29200 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
29210 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
29220 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
29230 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
29240 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
29250 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  or.);.void sqlit
29260 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74  e3OomFault(sqlit
29270 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
29280 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74  e3OomClear(sqlit
29290 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
292a0 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
292b0 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
292c0 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
292d0 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
292e0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
292f0 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
29300 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ccum*, sqlite3*,
29310 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
29320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29330 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
29340 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
29350 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ar*,int);.void s
29360 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
29370 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d  pendAll(StrAccum
29380 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
29390 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65  void sqlite3Appe
293a0 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a  ndChar(StrAccum*
293b0 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72  ,int,char);.char
293c0 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
293d0 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
293e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
293f0 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
29400 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
29410 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
29420 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
29430 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
29440 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
29450 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
29460 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
29470 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
29480 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
29490 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
294a0 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
294b0 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
294c0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
294d0 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
294e0 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  8 *);..#ifdef SQ
294f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
29500 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
29510 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
29520 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
29530 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
29540 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72  robeSetValue(Par
29550 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63  se*,Index*,Unpac
29560 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72  kedRecord**,Expr
29570 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  *,u8,int,int*);.
29580 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
29590 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
295a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
295b0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
295c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
295d0 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
295e0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
295f0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
29600 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
29610 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
29620 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
29630 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66  value**);.#endif
29640 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
29650 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
29660 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
29670 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
29680 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
29690 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
296a0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
296b0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
296c0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
296d0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
296e0 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
296f0 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
29700 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
29710 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
29720 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
29730 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
29740 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
29750 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
29760 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
29770 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29780 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
29790 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
297a0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
297b0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
297c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
297d0 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
297e0 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
297f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29800 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
29810 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
29820 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
29830 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
29840 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
29850 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
29860 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
29870 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
29880 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
29890 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
298a0 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
298b0 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
298c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
298d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
298e0 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
298f0 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
29900 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
29910 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
29920 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
29930 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
29940 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
29950 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
29960 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
29970 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
29980 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
29990 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
299a0 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  Lock(X).#  defin
299b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
299c0 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
299d0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
299e0 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
299f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
29a00 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
29a10 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
29a20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
29a30 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
29a40 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
29a50 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
29a60 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
29a70 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
29a80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
29a90 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
29aa0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
29ab0 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
29ac0 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
29ad0 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
29ae0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
29af0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
29b00 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
29b10 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
29b20 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
29b30 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
29b40 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
29b50 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
29b60 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
29b70 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
29b80 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
29b90 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
29ba0 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
29bb0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
29bc0 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
29bd0 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
29be0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
29bf0 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
29c00 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
29c10 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
29c20 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
29c30 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
29c40 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
29c50 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
29c60 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
29c70 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
29c80 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
29c90 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
29ca0 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
29cb0 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
29cc0 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
29cd0 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
29ce0 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
29cf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
29d00 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
29d10 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
29d20 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
29d30 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
29d40 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
29d50 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
29d60 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
29d70 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
29d80 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
29d90 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
29da0 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
29db0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
29dc0 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
29dd0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
29de0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
29df0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
29e00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
29e10 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
29e20 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
29e30 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
29e40 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
29e50 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
29e60 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
29e70 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
29e80 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
29e90 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
29ea0 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
29eb0 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
29ec0 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
29ed0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
29ee0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
29ef0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29f00 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
29f10 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
29f20 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
29f30 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
29f40 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
29f50 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
29f60 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
29f70 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
29f80 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
29f90 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
29fa0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29fb0 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
29fc0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
29fd0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
29fe0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ff0 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2a000 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2a010 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2a020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a030 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2a040 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2a050 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2a060 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2a070 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2a080 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2a090 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2a0a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2a0b0 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2a0c0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2a0d0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2a0e0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2a0f0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2a100 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2a110 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2a120 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2a130 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2a140 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2a150 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2a160 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2a170 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2a180 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2a190 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2a1a0 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2a1b0 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2a1c0 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2a1d0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2a1e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2a1f0 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2a200 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2a210 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2a220 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2a230 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2a240 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2a250 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2a260 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2a270 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2a280 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
2a290 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
2a2a0 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
2a2b0 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
2a2c0 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
2a2d0 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
2a2e0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
2a2f0 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
2a300 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
2a310 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
2a320 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
2a330 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
2a340 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
2a350 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
2a360 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
2a370 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
2a380 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
2a390 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
2a3a0 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
2a3b0 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
2a3c0 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
2a3d0 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70  ionality is.** p
2a3e0 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
2a3f0 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
2a400 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
2a410 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
2a420 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
2a430 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a440 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2a450 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
2a460 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2a470 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
2a480 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
2a490 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2a4a0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2a4b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2a4c0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
2a4d0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
2a4e0 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
2a4f0 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
2a500 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2a510 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2a520 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
2a530 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2a540 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
2a550 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2a560 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
2a570 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
2a580 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
2a590 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2a5a0 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
2a5b0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2a5c0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
2a5d0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
2a5e0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
2a5f0 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
2a600 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2a610 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
2a620 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
2a630 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
2a640 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
2a650 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2a660 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
2a670 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
2a680 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a690 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
2a6a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
2a6b0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
2a6c0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
2a6d0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2a6e0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
2a6f0 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
2a700 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
2a710 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2a720 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
2a730 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2a740 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
2a750 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
2a760 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
2a770 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
2a780 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
2a790 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
2a7a0 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
2a7b0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2a7c0 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
2a7d0 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
2a7e0 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
2a7f0 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
2a800 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2a810 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
2a820 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
2a830 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
2a840 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
2a850 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
2a860 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
2a870 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
2a880 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
2a890 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
2a8a0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2a8b0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
2a8c0 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
2a8d0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
2a8e0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
2a8f0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
2a900 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2a910 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2a920 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2a930 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
2a940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
2a950 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
2a960 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
2a970 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
2a980 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
2a990 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
2a9a0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2a9b0 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
2a9c0 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
2a9d0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
2a9e0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
2a9f0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
2aa00 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
2aa10 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
2aa20 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
2aa30 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2aa40 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
2aa50 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
2aa60 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2aa70 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
2aa80 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
2aa90 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
2aaa0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
2aab0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2aac0 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
2aad0 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
2aae0 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
2aaf0 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
2ab00 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
2ab10 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
2ab20 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
2ab30 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
2ab40 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
2ab50 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
2ab60 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
2ab70 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
2ab80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2ab90 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
2aba0 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
2abb0 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
2abc0 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
2abd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2abe0 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
2abf0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
2ac00 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
2ac10 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
2ac20 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2ac30 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
2ac40 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 69  , u32, int*);..i
2ac50 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2ac60 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
2ac70 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
2ac80 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
2ac90 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
2aca0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2acb0 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73  Size(sqlite3_vfs
2acc0 20 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   *);.#ifdef SQLI
2acd0 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
2ace0 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
2acf0 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
2ad00 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
2ad10 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2ad20 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49  qlite3JournalIsI
2ad30 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f  nMemory(sqlite3_
2ad40 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73  file *p);.void s
2ad50 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
2ad60 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
2ad70 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
2ad80 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
2ad90 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a  AndFlags(Parse *
2ada0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
2adb0 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
2adc0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
2add0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
2ade0 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
2adf0 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
2ae00 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2ae10 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
2ae20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2ae30 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
2ae40 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
2ae50 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2ae60 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2ae70 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
2ae80 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
2ae90 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
2aea0 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
2aeb0 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
2aec0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2aed0 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
2aee0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2aef0 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2af00 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
2af10 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
2af20 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2af30 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
2af40 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
2af50 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2af60 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
2af70 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
2af80 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2af90 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
2afa0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2afb0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2afc0 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
2afd0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2afe0 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
2aff0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2b000 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
2b010 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
2b020 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
2b030 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
2b040 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
2b050 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
2b060 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
2b070 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
2b080 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
2b090 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2b0a0 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
2b0b0 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
2b0c0 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
2b0d0 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f  ing messages..*/
2b0e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b0f0 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
2b100 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2b110 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
2b120 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
2b130 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
2b140 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
2b150 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
2b160 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c  ;.SQLITE_API SQL
2b170 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
2b180 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
2b190 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
2b1a0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
2b1b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2b1c0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
2b1d0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
2b1e0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
2b1f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
2b200 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
2b210 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
2b220 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
2b230 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
2b240 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
2b250 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
2b260 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
2b270 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
2b280 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
2b290 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
2b2a0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
2b2b0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
2b2c0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2b2d0 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
2b2e0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
2b2f0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
2b300 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
2b310 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
2b320 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
2b330 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
2b340 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
2b350 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
2b360 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2b370 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
2b380 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
2b390 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
2b3a0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2b3b0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2b3c0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2b3d0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2b3e0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2b3f0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
2b400 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2b410 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
2b420 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
2b430 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
2b440 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2b450 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
2b460 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
2b470 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
2b480 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2b490 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2b4a0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2b4b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2b4c0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2b4d0 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
2b4e0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
2b4f0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
2b500 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
2b510 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
2b520 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
2b530 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
2b540 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
2b550 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
2b560 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
2b570 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
2b580 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
2b590 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
2b5a0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
2b5b0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
2b5c0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
2b5d0 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
2b5e0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
2b5f0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
2b600 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
2b610 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
2b620 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
2b630 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
2b640 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
2b650 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
2b660 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2b670 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
2b680 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
2b690 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
2b6a0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
2b6b0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
2b6c0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
2b6d0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
2b6e0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a  s constraint..**
2b6f0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
2b700 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
2b710 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
2b720 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
2b730 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
2b740 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
2b750 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
2b760 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
2b770 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
2b780 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
2b790 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
2b7a0 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
2b7b0 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
2b7c0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2b7d0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
2b7e0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
2b7f0 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
2b800 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
2b810 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2b820 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
2b830 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
2b840 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2b850 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
2b860 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
2b870 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2b880 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
2b890 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
2b8a0 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
2b8b0 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
2b8c0 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
2b8d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2b8e0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
2b8f0 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61  x02  /* Heap tha
2b900 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2b910 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23  n lookaside */.#
2b920 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
2b930 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
2b940 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
2b950 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
2b960 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
2b970 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
2b980 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
2b990 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ions */../*.** T
2b9a0 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
2b9b0 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
2b9c0 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
2b9d0 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
2b9e0 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
2b9f0 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
2ba00 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
2ba10 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2ba20 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
2ba30 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
2ba40 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
2ba50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2ba60 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42  ABLE_DBSTAT_VTAB
2ba70 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2ba80 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
2ba90 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73  lite3DbstatRegis
2baa0 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
2bab0 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
2bac0 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a   _SQLITEINT_H_ *
2bad0 2f 0a                                            /.